【发布时间】:2017-12-01 20:32:05
【问题描述】:
react 文档提到对setState 的调用已排队,并且不会立即发生。 react 是否保证setState 在componentWillReceiveProps 中排队将在下一个组件渲染之前执行?这两种情况中的任何一种都比另一种更有可能吗?
props 更改 > componentWillReceiveProps 调用 > setState enqueued > setState 运行 > 渲染(包括新状态)
props change > componentWillReceiveProps called > setState enqueued > render > setState runs > re-rendered
或者,这两种情况的可能性相同吗?意思是说 React 不做任何保证 setState 是否会相对于组件生命周期方法运行?
这是我的示例的 ES2015 代码摘录:
import React from 'react';
class Widget extends React.Component {
componentWillReceiveProps() {
this.setState({foo: 'bar'});
}
render() {
return <div>
<a onClick={(e) => {
e.preventDefault();
this.props.triggerExternalPropsChange();
}}>
Click me to trigger new props
</a>
</div>;
}
}
triggerExternalPropsChange 将新的 props 传递给 Widget 组件。
【问题讨论】:
-
这两种情况都有可能。无论状态是否已完成设置,您都应该始终设置渲染以成功完成。
标签: reactjs