React 组件 API 中的设置状态是指在 React 组件中使用 this.state 来设置和更新组件的内部状态。它是一个 JavaScript 对象,可以存储任意数量的键值对,用于保存组件的内部数据。
React 的 this.state 属性可以通过 this.setState() 方法来更新,这个方法会将新的 state 合并到当前 state 中。当 state 更新时,React 会重新渲染组件,使其显示最新的 state。
this.setState({ count: this.state.count + 1 });
this.setState() 方法是异步的,因此不能立即获取最新的 state。如果需要在 state 更新后执行一些代码,可以将函数作为 setState() 的第二个参数传入:
this.setState({ count: this.state.count + 1 }, () => { console.log(this.state.count); // 这里可以获取最新的 state 了 });
在本章节中我们将讨论 React 组件 API。
我们将讲解以下7个方法:
setState
replaceState
setProps
replaceProps
forceUpdate
findDOMNode
isMounted
setState(object nextState[, function callback])
合并nextState和当前state,并重新渲染组件。
setState是React事件处理函数中和请求回调函数中触发UI更新的主要方法。
注意: 不能在组件内部通过this.state
修改状态,因为该状态会在调用setState()
后被替换。
setState() 并不会立即改变 this.state,而是创建一个即将处理的state。
setState() 并不一定是同步的,为了提升性能React会批量执行state和DOM渲染。
setState() 总是会触发一次组件重绘,除非在shouldComponentUpdate()中实现了一些条件渲染逻辑。
class Counter extends React.Component{
constructor(props) {
super(props);
this.state = {clickCount: 0};
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
this.setState(function(state) {
return {clickCount: state.clickCount + 1};
});
}
render () {
return (<h2 onClick={this.handleClick}>点我!点击次数为: {this.state.clickCount}</h2>);
}
}
ReactDOM.render(
<Counter />,
document.getElementById("example")
);
实例中通过点击 h2 标签来使得点击计数器加 1。
replaceState(object nextState[, function callback])
replaceState()方法与setState()类似,但是方法只会保留nextState中状态,原state不在nextState中的状态都会被删除。
setProps(object nextProps[, function callback])
设置组件属性,并重新渲染组件。
props相当于组件的数据流,它总是会从父组件向下传递至所有的子组件中。当和一个外部的JavaScript应用集成时,我们可能会需要向组件传递数据或通知React.render()组件需要重新渲染,可以使用setProps()。
更新组件,我可以在节点上再次调用React.render(),也可以通过setProps()方法改变组件属性,触发组件重新渲染。
replaceProps(object nextProps[, function callback])
replaceProps()方法与setProps类似,但它会删除原有
props
forceUpdate([function callback])
forceUpdate()方法会使组件调用自身的render()方法重新渲染组件,组件的子组件也会调用自己的render()。但是,组件重新渲染时,依然会读取this.props和this.state,如果状态没有改变,那么React只会更新DOM。
forceUpdate()方法适用于this.props和this.state之外的组件重绘(如:修改了this.state后),通过该方法通知React需要调用render()
一般来说,应该尽量避免使用forceUpdate(),而仅从this.props和this.state中读取状态并由React触发render()调用。
DOMElement findDOMNode()
如果组件已经挂载到DOM中,该方法返回对应的本地浏览器 DOM 元素。当render返回null 或 false时,this.findDOMNode()也会返回null。从DOM 中读取值的时候,该方法很有用,如:获取表单字段的值和做一些 DOM 操作。
bool isMounted()
isMounted()方法用于判断组件是否已挂载到DOM中。可以使用该方法保证了setState()和forceUpdate()在异步场景下的调用不会出错。
本文参考:http://itbilu.com/javascript/react/EkACBdqKe.html
HTML DOM 节点
SQL SELECT TOP 子句SQL SELECT TOP 子句 SELECT TOP 子句用于规定要返回的记录的数目。 SELECT TOP 子句对于拥有数千条记录...
SQL DEFAULT 约束SQL DEFAULT 约束 DEFAULT 约束用于向列中插入默认值。 如果没有规定其他的值,那么会将默认值添加到所有的新记...
SQL CREATE INDEX 语句CREATE INDEX 语句用于在表中创建索引。 在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数...
SQL 约束(Constraints) SQL 约束(Constraints) SQL 约束用于规定表中的数据规则。 如果存在违反约束的数据行为,行为会被约...
SQL RIGHT JOIN 关键字SQL RIGHT JOIN 关键字 RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。...
SQL Server CONVERT() 函数 SQL Server Date 函数定义和用法 CONVERT() 函数是把日期转换为新数据类型的通用函数。 CONVERT() 函...
SQL INSERT INTO 语句INSERT INTO 语句用于向表中插入新记录。SQL INSERT INTO 语句 INSERT INTO 语句用于向表中插入新记录。 SQ...
SQL ALTER TABLE 语句ALTER TABLE 语句 ALTER TABLE 语句用于在已有的表中添加、删除或修改列。 SQL ALTER TABLE 语法 如需在表...
SQL LEFT JOIN 关键字SQL LEFT JOIN 关键字 LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如...