我意识到调用 setState 不会立即更新 this.state ,也不会立即调用 render 并刷新DOM . 文档说
setState
this.state
render
setState()不会立即改变this.state,但会创建挂起状态转换 . 调用此方法后访问this.state可能会返回现有值 . 无法保证对setState的调用进行同步操作,并且可以对调用进行批处理以获得性能提升 .
我希望能够在任何时候强制这样的“状态转变” . 这似乎应该是一个相当自然的操作,但我在文档中找不到任何提及它 . 有办法吗?
您可以使用 forceUpdate :
forceUpdate
如果你的render()方法从this.props或this.state以外的东西读取,你需要通过调用forceUpdate()来告诉React何时需要重新运行render() . 如果你直接改变this.state,你还需要调用forceUpdate() .
https://facebook.github.io/react/docs/component-api.html#forceupdate
您可以将 forceUpdate 与顶级组件上的密钥结合使用 .
let key= 0; var Hello = React.createClass({ sudoForceUpdate(){ key++; this.forceUpdate(); }, render: function(){ return <div key={key}>Example</div>; } });
通过编辑密钥并强制更新,dom将始终重新呈现 .
这是一个突出强制编辑与密钥更改*之间差异的示例 .
https://jsfiddle.net/69z2wepo/82763/
*请注意,这可能是非常糟糕的做法 .
感谢Ben Alpert:https://groups.google.com/forum/#!topic/reactjs/8JgClU9jol0
2 回答
您可以使用
forceUpdate
:https://facebook.github.io/react/docs/component-api.html#forceupdate
您可以将
forceUpdate
与顶级组件上的密钥结合使用 .通过编辑密钥并强制更新,dom将始终重新呈现 .
这是一个突出强制编辑与密钥更改*之间差异的示例 .
https://jsfiddle.net/69z2wepo/82763/
*请注意,这可能是非常糟糕的做法 .
感谢Ben Alpert:https://groups.google.com/forum/#!topic/reactjs/8JgClU9jol0