我正在构建应用程序的UI,我正在探索更新UI而无需使用States。以下断言是否粗略正确?
'我们不需要状态,因为当状态内的某些内容发生变化时,它所做的就是在组件上自动调用render方法。我们可以通过在相关组件上调用render方法来实现相同的实现。
我们仍然可以实现React的所有相同优势(虚拟DOM,渲染,绘画优化等)'
答案 0 :(得分:7)
技术上正确,您无需使用React的内部组件状态来构建React应用程序。当然,数据需要在某处,所以你需要一种机制,当数据发生变化时,它可以将所有数据传递到顶层组件(它将渗入所有其他组件)
这是flux(和许多其他旨在提供React状态外存储的模式)背后的基本思想。您有一个或多个商店,商店会在数据更改时提供更改事件。然后,数据通过道具传递到应用程序。
function render(data) {
ReactDOM.render(
<Application data={data} />,
containerNode
)
}
myDataStore.on('change', render);
然而,实际上,由于JavaScript的工作原理,很难做到这一点。像上面这样的代码会使React每次myDataStore
更改时重新呈现整个组件树,并且没有良好的shouldComponentUpdate
挂钩,这可能是性能问题。使用不可变值有助于更轻松地实现良好的shouldComponentUpdate
方法。
您通常会在使用React数据存储之外的更大的React应用程序中看到以下内容的组合: