[React]属性和状态
来源:互联网 发布:程序员 团队贡献 编辑:程序博客网 时间:2024/06/05 20:15
属性和含义和用法(props)
三种赋值方法
1.
var style = { color: "red", border: "1px solid #000", }; var HelloWorld = React.createClass({ render: function () { return <p>Hello, {this.props.name ? this.props.name : "World"}</p>; } }); var HelloUniverse = React.createClass({ getInitialState: function () { return {name: ''}; }, handleChange: function (event) { this.setState({name: event.target.value}); }, render: function () { return <div> <HelloWorld name={this.state.name}></HelloWorld> <br/> <input type="text" onChange={this.handleChange}/> </div> } }); ReactDOM.render( <div style={style}><HelloUniverse></HelloUniverse></div> , document.body)
2.
var style = { color: "red", border: "1px solid #000", }; var HelloWorld = React.createClass({ render: function () { return <p>Hello, {this.props.name1 + ' ' + this.props.name2}</p>; } }); var HelloUniverse = React.createClass({ getInitialState: function () { return { name1: 'Tim', name2: 'John' }; }, handleChange: function (event) { this.setState({name1: event.target.value}); }, render: function () { return <div> <HelloWorld {...this.state}></HelloWorld> <br/> <input type="text" onChange={this.handleChange}/> </div> } }); ReactDOM.render( <div style={style}><HelloUniverse></HelloUniverse></div> , document.body)
3.setProps形式:通过组件更新属性,不能在组件内部中修改属性的,因为会违背组件设计原则(尽量避免)
var HelloWorld = React.createClass({ render: function(){ return <p>Hello, {this.props.name}</p> } }); var instance = ReactDOM.render(<HelloWorld></HelloWorld>, document.body); instance.setProps({name: 'wilcohuang'});
状态的含义和用法(state)
- getInitialState: 初始化每个实例特有和居状态
- setState: 更新组件状态,setState->diff算法->(如果有变化)->更新DOM
属性和状态对比
相同点:
- 都是纯JS对象
- 都会触发render更新
- 都具有确定性
组件在运行时需要修改的数据就要状态。
属性和状态实战
- 分析构成项目的组件
- 分析组件的关系及数据传递
- 实际编写代码
var Content = React.createClass({ render: function () { return <p>{this.props.selectName}</p>; }, }); var Comment = React.createClass({ getInitialState: function () { return { names: ['Tim', 'John', 'Hank'], selectName: '', }; }, handleSelect: function () { this.setState({selectName: event.target.value}); }, render: function () { var options = []; for (var option in this.state.names) { options.push(<option value={this.state.names[option]}>{this.state.names[option]}</option>); } return <div> <select onChange={this.handleSelect}> {options} </select> <Content selectName={this.state.selectName}></Content> </div>; }, }); ReactDOM.render(<Comment></Comment>, document.body);
var Content = React.createClass({ getInitialState: function () { return {// text: "reply To: " + this.props.selectName, //写在这里是错误的,getInitialState相当于构造函数,如果selectName改变,这里不能更新 inputText: "", }; }, handleChange: function (event) { this.setState({inputText: event.target.value}); }, handleSubmit: function () { console.log('reply to ' + this.props.selectName + "\n" + this.state.inputText); }, render: function () { return <div> <textarea onChange={this.handleChange} placeholder="please enter something..."></textarea> <button onClick={this.handleSubmit}>submit</button> </div>; }, }); var Comment = React.createClass({ getInitialState: function () { return { names: ['Tim', 'John', 'Hank'], selectName: '', }; }, handleSelect: function () { this.setState({selectName: event.target.value}); }, render: function () { var options = []; for (var option in this.state.names) { options.push(<option value={this.state.names[option]}>{this.state.names[option]}</option>); } return <div> <select onChange={this.handleSelect}> {options} </select> <Content selectName={this.state.selectName}></Content> </div>; }, }); ReactDOM.render(<Comment></Comment>, document.body);
阅读全文
0 0
- React属性和状态
- React 属性和状态
- [React]属性和状态
- React 属性和状态详解
- React属性和状态详解
- React属性和状态详解
- 4. React 属性和状态介绍
- React Native 属性.样式.状态
- React---状态和生命周期
- React Native(二):属性、状态
- React学习笔记(4)---react属性与状态
- React Native从零开始(三)Props(属性)和State(状态)
- React Native探索(三)组件的Props(属性)和State(状态)
- React Native入门(三)之Props(属性)和State(状态)
- React 标签和属性支持
- 属性和状态对比
- React Native声明属性和属性确认
- React Native声明属性和属性确认
- 698. Partition to K Equal Sum Subsets
- [work]pycharm配置virtual env
- 17.Letter Combinations of a Phone Number
- oracle--5.多行函数
- #快速编写Thrift简单接口
- [React]属性和状态
- Loadrunner12安装教程
- 17.12.10,web学习第二十二天,还有一年,努力吧青年Ajax
- Search Insert Position
- log10
- 关于 Spring task和线程池
- 一行bash命令http server
- 以EOF结束、以0 0结束、以0结束的例题总结
- Spring中的线程安全