赵走x博客
网站访问量:151955
首页
书籍
软件
工具
古诗词
搜索
登录
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
13、组件生命周期示例:使用mixin
资源编号:76061
书籍
React快速上手开发
热度:80
为了实现代码复用,接下来引入一个新概念:mixin。
在前面的例子中,五个生命周期方法中的四个已经被日志记录下来。当子组件从父组件中移除时,最能体现第五个方法componentWillUnmount() 的作用。在下面这个例子中,要把父子组件的所有变化都记录下来。为了实现代码复用,接下来引入一个新概念:mixin。 mixin 其实是一个JavaScript 对象,包含一系列方法和属性。mixin 不能独立使用,需要包含在另一个对象的属性中。在这个日志例子中,mixin 可以写成这样: ``` var logMixin={ _log:function(methodName,args){ console.log(methodName,args); }, componentWillUpdate:function(){ this._log('componentWillUpdate',arguments) }, componentDidUpdate:function(){ this._log('componentDidUpdate',arguments) }, componentWillMount:function(){ this._log('componentWillMount',arguments) }, componentDidMount:function(){ this._log('componentDidMount',arguments) }, componentWillUnmount:function(){ this._log('componentWillUnmount',arguments) }, }; ``` 在非React 世界中,你可以使用for-in 循环,把所有属性复制到一个新对象中,并通过这种方法让新对象获得mixin 的所有功能。在React 世界中,你可以通过mixins 属性快速实现,就像这样: ``` var MyComponent = React.createClass({ mixins: [obj1, obj2, obj3], // 其他所有方法 }; ``` 只需要把一个JavaScript 对象数组赋值给mixins 属性,然后把剩下的工作交给React。把logMixin 包含到组件中的方法如下: ``` var TextAreaCounter = React.createClass({ name: 'TextAreaCounter', mixins: [logMixin], // 其他所有方法 }; ``` 如你所见,这个代码片段还添加了一个name 属性,方便辨认调用者。 如果你运行这个包含mixin 的代码例子,可以看到其日志输出(如图2-12 所示)。  图2-12:使用mixin 并辨认组件