赵走x博客
网站访问量:151963
首页
书籍
软件
工具
古诗词
搜索
登录
49、Flux:理念、回顾Whinepad
48、lint、Flow、测试与复验:测试
47、lint、Flow、测试与复验:Flow
46、lint、Flow、测试与复验:ESLint
45、lint、Flow、测试与复验:package.json
44、构建实例应用:<Whinepad>
43、构建实例应用:应用配置
43、构建实例应用:<Excel>:改进的新版本
42、构建实例应用:组件:对话框
41、构建实例应用:组件:Actions
39、构建实例应用:表单:Form
38、构建实例应用:表单:<FormInput>“工厂组件”
37、构建实例应用:表单:Rating组件
36、构建实例应用:表单:Suggest
35、构建实例应用:Button组件
34、构建实例应用:组件
33、构建实例应用:Whinepad v.0.0.1
32、发布
31、开始构建
30、安装必备工具
29、为应用开发做准备:一个模板应用
28、JSX 和表单
27、JSX 和HTML 的区别
26、在JSX 中返回多个节点
25、展开属性
24、HTML 实体
23、JSX入门
22、Excel:一个出色的表格组件:下载表格数据
21、Excel:一个出色的表格组件:即时回放
20、Excel:一个出色的表格组件:搜索
19、Excel:一个出色的表格组件:编辑数据
18、Excel:一个出色的表格组件:排序
17、Excel:一个出色的表格组件
16、 PureRenderMixin
15、 性能优化:避免组件更新
14、 生命周期示例:使用子组件
13、组件生命周期示例:使用mixin
12、组件:生命周期方法
11、中途改变属性
10、从外部访问组件
9、在初始化state 时使用props:一种反模式
8、 props 与state
7、关于DOM 事件的说明
6、组件:带状态的文本框组件
5、组件的state
4、组件的propTypes
3、组件的属性
2、组件的基础
1、Hello World
50、Flux:Store
25、展开属性
资源编号:76075
书籍
React快速上手开发
热度:79
JSX 向ECMAScript6 借鉴了一项实用的特性,称为展开运算符(spread operator)。
JSX 向ECMAScript6 借鉴了一项实用的特性,称为展开运算符(spread operator)。当你定义属性时,可以使用这种便捷的方法。 假设你需要把一系列属性传递给`
`标签组件: ``` var attr = { href: 'http://example.org', target: '_blank', }; ``` 你当然可以这样写: ``` return (
Hello
); ``` 但是这种写法过于冗余。使用展开运算符,只需一行代码即可完成相同的功能: ``` return
Hello
; ``` 在这个例子中,你(可能根据某些特定条件)提前定义了一个属性对象。这通常是独立使用该组件时的情况;但更常见的使用场景是,从组件外部取得这个对象属性——通常是从父组件传递过来的属性。接下来我们就来看看这种情况。 ### 在父子组件之间使用展开属性 假设你正在构建一个FancyLink 组件,其内部使用的是常规的`
` 标签实现。你希望组件可以接收所有`
` 标签可接收的属性(包括href、style、target 等)以及一些额外的属性(比如size)。然后其他用户可以这样使用你的组件: ```
Hello
``` 这时,你的render() 函数应该如何利用展开属性的优势,避免重新定义`
`标签的所有属性呢? ``` var FancyLink = React.createClass({ render: function() { switch(this.props.size) { // 基于size属性进行一些处理 } return
{this.props.children}
; } }); ``` 注意到this.props.children 的使用了吗?这是一个简单方便的方法,允许你传递任意数量的子节点到组件中,并通过这个属性在组合界面时访问其内容。 在前面这个代码片段中,你基于size 属性进行了一些自定义处理,然后把所有属性简单地传递给`
` 标签。这当中也包含了size 属性。React.DOM.a 中没有size 的概念,因此会自动忽略这个属性,并用上其他所有属性。 你可以对代码进行一些改进,避免传递不必要的属性: ``` var FancyLink = React.createClass({ render: function() { switch(this.props.size) { // 基于size属性进行一些处理 } var attribs = Object.assign({}, this.props); // 浅复制 delete attribs.size; return
{this.props.children}
; } }); ``` 使用ECMAScript7 提议的语法(和前面一样无需额外的工作,Babel 可以进行转换!)可以让代码进一步简化,无需进行对象复制: ``` var FancyLink = React.createClass({ render: function() { var {size, ...attribs} = this.props; switch (size) { // 基于size 属性进行一些处理 } return
{this.props.children}
; } }); ```