Facebook React 鼓励您将可变(state)和不可变(props)状态分开:
state
props
尝试使尽可能多的组件保持无状态。通过这样做,您可以将状态隔离到最逻辑的位置,并最大程度地减少冗余,从而使推理应用程序更加容易。
当状态更改时,应该调用setState触发虚拟DOM diff,这仅在需要时才引起真正的DOM更新。
setState
有 是 一种方法来触发DOM更新手动调用forceUpdate,但它是灰心:
forceUpdate
通常情况下 ,你应该尽量避免的所有使用forceUpdate()和只读this.props,并this.state在render()。这使您的应用程序更加简单和高效。
forceUpdate()
this.props
this.state
render()
但是,我看到的所有React + Backbone示例都 忽略了此建议, 并在其中存储模型和集合props并调用forceUpdate:
甚至React自己的示例也使用forceUpdate:
但是,有没有更好的方法,它将带来什么好处?
皮特的答案很好。
骨干模型本质上是可变的,这(虽然本身不是问题)意味着重新渲染时,您将没有模型的旧版本可与之进行比较。通过shouldComponentUpdate在组件上关键位置定义方法,使进行智能优化变得更加困难。(由于其他原因,例如实现undo,您也失去了轻松存储模型旧版本的能力。)
shouldComponentUpdate
调用forceUpdate仅跳过shouldComponentUpdate并迫使组件重新呈现。请注意,调用render通常很便宜,并且当输出render更改时,React仍然只会接触DOM ,因此这里的性能问题并不常见。但是,如果您选择使用不可变数据(包括toJSON()像Pete建议的那样传递原始模型属性对象),则强烈建议您使用。
render
toJSON()