React 数据流与状态控制-props与sate的区别
2017-04-18 00:00
375 查看
摘要: React 数据流与状态控制-props与sate的区别
React 基于状态实现对DOM控制和渲染。组件状态分为两种:一种是组件间的状态传递、另一种是组件的内部状态,这两种状态使用
数据流与
1.1 设置
1.2 JSX语法中的属性设置
1.3
组件内部状态与
1. 数据流与
React中的数据流是单向的,只会从父组件传递到子组件。属性
1.1 设置
可以在组件挂载时设置
也可以通过调用组件实例的
或是通过
1.3
组件接收上级组件的
2. 组件内部状态与
如,用
随着
3.
React会根据
React 基于状态实现对DOM控制和渲染。组件状态分为两种:一种是组件间的状态传递、另一种是组件的内部状态,这两种状态使用
props和
state表示。
props用于从父组件到子组件的数据传递。组件内部也有自己的状态:
state,这些状态只能在组件内部修改。
数据流与
Props
1.1 设置
props
1.2 JSX语法中的属性设置
1.3
props的传递
组件内部状态与
state
Props与
state的比较
1. 数据流与Props
React中的数据流是单向的,只会从父组件传递到子组件。属性props(properties)是父子组件间进行状态传递的接口,React会向下遍历整个组件树,并重新渲染使用这个属性的组件。
1.1 设置props
可以在组件挂载时设置props:
var sites = [{title:'itbilu.com'}]; <ListSites sites={sites} />
也可以通过调用组件实例的
setProps()方法来设置
props:
var sites = [{title:'itbilu.com'}]; var listSites = React.render( <ListSites />, document.getElementById('example') )
setProps()方法只能在组件外调用,不能在组件内部调用
this.setProps()修改组件属性。组件内部的
this.props属性是只读的,只能用于访问
props,不能用于修改组件自身的属性。
1.2 JSX语法中的属性设置
JSX语法中,props可以设置为字符串:
<a href="http://itbilu.com">IT笔录</a>
或是通过
{}语法设置:
var obj = {url:'itbilu.com', name:'IT笔录'}; <a href="http://{obj.url}">{obj.name}</a>
JSX方法还支持将
props直接设置为一个对象:
var site = React.createClass({ render: function() { var obj = {url:'itbilu.com', name:'IT笔录'}; return: <Site {...obj} />; } })
props还可以用来添加事件处理:
var saveBtn = React.createClass({ render: function() { <a onClick={this.handleClick} >保存</> } handleClick: fuction() { //… } })
1.3 props
的传递
组件接收上级组件的props,并传递
props到其下级组件。如:
var myCheckbox = React.createClass({ render: myCheckbox() { var myClass = this.props.checked ? 'MyChecked' : 'MyCheckbox'; return ( <div className={myClass} onClick={this.props.onClick}> {this.props.children} </div> ); } }); React.render( <MyCheckbox checked={true} onClick={console.log.bind(console)}> Hello world! </MyCheckbox>, document.getElementById('example') );
2. 组件内部状态与state
props可以理解为父组件与子组件间的状态传递,而React的组件都有自己的状态,这个内部状态使用
state表示。
如,用
state定义一个
<DropDown />组件的状态:
var SiteDropdown = React.createClass({ getInitalState: function() { return: { showOptions: false } }, render: function() { var opts; if(this.state.showOptions) { <ul> <li>itbilu.com</li> <li>yijiebuyi.com</li> <li>niefengjun.cn</li> </ul> }; return ( <div onClick={this.handleClick} > </ div> ) }, handleClick: function() { this.setSate({ showOptions: true }) } });
随着
state的改变,
render也会被调用,React会对比
render的返回值,如果有变化就会DOM。
state与
props类似,只能通过
setSate()方法修改。不同的是,
state只能在组件内部使用,其是对组件本身状态的一个引用。
3. Props
与state
的比较
React会根据props或
state更新视图状态。虽然二者有些类似,但应用范围确不尽相同。具体表现如下:
props会在整个组件数中传递数据和配置,
props可以设置任命类型的数据,应该把它当做组件的数据源。其不但可以用于上级组件与下组件的通信,也可以用其做为事件处理器。
state只能在组件内部使用,
state只应该用于存储简单的视图状(如:上面示例用于控制下拉框的可见状态)。
props和
state都不能直接修改,而应该分别使用
setProps()和
setSate()方法修改。
相关文章推荐
- React 数据流与状态控制-props与sate的区别
- 【转载】React 数据流与状态控制-props与sate的区别
- React 数据流与状态控制-props与sate的区别
- React 数据流与状态控制-props与sate的区别
- React中props.children和React.Children的区别
- ReactNative中 ...this.other与...this.props的区别
- react完全控制与不完全控制的区别
- 线程状态控制 CountDownLatch和CyclicBarrier的区别
- React Native - (二) Props属性和State状态
- react中 state 和 props 主要的区别
- 夺命雷公狗-----React---7--组建的状态props和state
- react---react创建组件的三种方式以及区别:无状态组件、工厂模式、es6语法定义
- React创建组件的三种方式及其区别(无状态组件)
- 控制react的路由Link为激活时的状态
- React Native开发】React Native 基础之Props(属性)与State(状态)使用讲解
- state和props的区别__react
- React无状态组件更新props时会失去焦点
- React 疑难点-Props和State的区别
- React中state和props的区别
- 09、react之 属性与状态的区别