小编典典

将React与Backbone一起使用时,可以避免使用forceUpdate()吗?

reactjs

Facebook React
鼓励您将可变(state)和不可变(props)状态分开:

尝试使尽可能多的组件保持无状态。通过这样做,您可以将状态隔离到最逻辑的位置,并最大程度地减少冗余,从而使推理应用程序更加容易。

当状态更改时,应该调用setState触发虚拟DOM diff,这仅在需要时才引起真正的DOM更新。


一种方法来触发DOM更新手动调用forceUpdate,但它是灰心

通常情况下
,你应该尽量避免的所有使用forceUpdate()和只读this.props,并this.staterender()。这使您的应用程序更加简单和高效。

但是,我看到的所有React + Backbone示例都 忽略了此建议, 并在其中存储模型和集合props并调用forceUpdate

甚至React自己的示例也使用forceUpdate

但是,有没有更好的方法,它将带来什么好处?


阅读 286

收藏
2020-07-22

共1个答案

小编典典

皮特的答案很好。

骨干模型本质上是可变的,这(虽然本身不​​是问题)意味着重新渲染时,您将没有模型的旧版本可与之进行比较。通过shouldComponentUpdate在组件上关键位置定义方法,使进行智能优化变得更加困难。(由于其他原因,例如实现undo,您也失去了轻松存储模型旧版本的能力。)

调用forceUpdate仅跳过shouldComponentUpdate并迫使组件重新呈现。请注意,调用render通常很便宜,并且当输出render更改时,React仍然只会接触DOM
,因此这里的性能问题并不常见。但是,如果您选择使用不可变数据(包括toJSON()像Pete建议的那样传递原始模型属性对象),则强烈建议您使用。

2020-07-22