React属性和状态详解
2016-09-10 21:58
253 查看
一、属性的含义和用法props = properties3种用法:(1)<HelloWorld key=?/> (key="Tim",key={123},key={"Tim"},key={[1,2,3]},key={variable})(2)var props = {one:"123",two:321}<HelloWorld{...props}/>(3)调用.setProps({name:"Tim"}); 几乎不使用这个方法
state只和组件本身相关。props不能修改自己的属性。(3)区分:组件在运行时需要修改的数据就是状态。四、属性和状态实例(编写一个简单的文章评论框)代码如下:
<!DOCTYPE html> <html lang="zn-cn"> <head> <meta charset="UTF-8"> <title>React</title> </head> <body> <script src="./build/react.js"></script> <script src="./build/JSXTransformer.js"></script> <script type="text/jsx"> var style={ color:"red", border:"1px solid #000" }; var HelloWorld = React.createClass({ render:function () { console.log("render,4"); 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({name:event.target.value}) }, render:function () { return ( <div> <HelloWorld {...this.state}></HelloWorld> <br/> <input type="text" onChange={this.handleChange}/> </div> ) } }); React.render(<div style={style}><HelloUniverse></HelloUniverse></div>,document.body); </script> </body> </html>var instance = React.render(<HelloWorld></HelloWorld>,document.body);instance.setProps({name:'Tim'});二、状态的含义和用法state:是可以变化的,由事物自行处理。getInitialState:初始化每个实例特有的状态setState:更新组件状态setState——diff算法——(变化)更新DOM
<!DOCTYPE html> <html lang="zn-cn"> <head> <meta charset="UTF-8"> <title>React</title> </head> <body> <script src="./build/react.js"></script> <script src="./build/JSXTransformer.js"></script> <script type="text/jsx"> var style={ color:"red", border:"1px solid #000" }; var HelloWorld = React.createClass({ render:function () { console.log("render,4"); return <p>Hello,{this.props.name}</p>; } }); var HelloUniverse = React.createClass({ getInitialState:function () { return { name:"Tim" }; }, handleChange:function (event) { this.setState({name:event.target.value}) }, render:function () { return ( <div> <HelloWorld {...this.state}></HelloWorld> <br/> <input type="text" onChange={this.handleChange}/> </div> ) } }); React.render(<div style={style}><HelloUniverse></HelloUniverse></div>,document.body); </script> </body> </html>三、属性和状态对比(1)相似点:都是纯js对象都会触发render更新都有确定性(2)对比:
props | state | |
能否从父组件获取初始值? | true | false |
能否由父组件修改? | true | false |
能否在组件内部设置默认值? | true | true |
能否在组件内部修改? | false | true |
能否设置子组件的初始值 | true | false |
能否修改子组件的值 | true | false |
<!DOCTYPE html><html lang="zn-cn"><head><meta charset="UTF-8"><title>React</title></head><body><script src="./build/react.js"></script><script src="./build/JSXTransformer.js"></script><script type="text/jsx">var Content = React.createClass({getInitialState:function () {return {inputText:" "}},handleChange:function () {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","Johm","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>)}});React.render(<Comment/>,document.body);</script></body></html>
相关文章推荐
- React属性和状态详解
- React学习笔记-8-属性和状态详解
- React 属性和状态详解
- react.js 从零开始(四)React 属性和状态详解
- React 属性和状态详解
- 详解在React中跨组件分发状态的三种方法
- 4. React 属性和状态介绍
- 4. React 属性和状态介绍
- react 属性与状态 学习笔记
- React:组件的状态和属性
- react demo12 (获取组件属性状态this.state)
- react demo13 (根据组件属性状态this.state实现表单实时监控)
- React 属性和状态的一些总结
- React学习笔记(4)---react属性与状态
- React 属性和状态
- [React]属性和状态
- 09、react之 属性与状态的区别
- React属性和状态对比
- react-router中<Link/>的属性详解
- css手势状态定义属性cursor和自定义鼠标手势详解