赵走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
11、中途改变属性
资源编号:76059
书籍
React快速上手开发
热度:83
正如你已经知道的,属性是配置组件的一种方式。因此在组件创建完成后,从外部改变组件的属性也是合理的。但你的组件应当作好应对这种场景的准备。
正如你已经知道的,属性是配置组件的一种方式。因此在组件创建完成后,从外部改变组件的属性也是合理的。但你的组件应当作好应对这种场景的准备。 如果你回去看看之前例子中的render() 方法,会发现我们在该方法中只用到了this.state: ``` render: function() { return React.DOM.div(null, React.DOM.textarea({ value: this.state.text, onChange: this._textChange, }), React.DOM.h3(null, this.state.text.length) ); } ``` 如果你从外部改变了组件属性,不会对渲染产生影响。换句话说,当你进行如下操作时,文本框中的内容不会发生变化: ``` myTextAreaCounter = ReactDOM.render( React.createElement(TextAreaCounter, { defaultValue: "Hello", // 之前的值为字符串"Bob" }), document.getElementById("app") ); ``` 尽管myTextAreaCounter 会在ReactDOM.render() 重新调用时被覆盖,但是应用的原有状态依然会保留。React 会在应用改变前后作出协调(reconciliation),且不会消除之前的数据。相反,React 仅作出最小限度的修改。 现在this.props 的内容发生了变化(但界面没有变化): ``` myTextAreaCounter.props; // 对象{defaultValue="Hello"} ``` 设置state 确实会更新界面: ``` // 反例 myTextAreaCounter.setState({text: 'Hello'}); ``` 但这种做法是不好的,因为这在更复杂的组件中可能会导致不一致的状态; 比如打乱内部计数器、布尔型标记、事件监听器等。 如果你希望优雅地处理外部入侵(即属性改变),可以通过componentWillReceiveProps()方法实现: ``` componentWillReceiveProps: function(newProps) { this.setState({ text: newProps.defaultValue, }); }, ``` 如你所见,这个方法会接收新属性对象,让你可以根据新属性设置state。此外,还可以进 行其他工作以确保组件状态保持正常。