在React/Redux应用中仅在根层级设置单个订阅者是否为最佳实践?
单订阅者全量重渲染的React+Redux大型应用实践
嘿各位,去年我用React和Redux开发了一个规模不小的应用,当时采用了一种挺有意思的模式——整个应用只在根层级设置一个订阅者,每次状态变化就重新渲染整个应用。
先给大家看看核心的代码模式:
const myApp = () => { store.subscribe(render); render(); }; module.exports = myApp; const render = () => { const rootDOMElement = document.getElementById('root'); ReactDOM.render( <section className="myApp"> {/* 应用的所有组件内容都在这里 */} </section>, rootDOMElement ); };
本质上,这个模式的核心就是:每次Redux store的状态发生变化时,都会触发根级的重新渲染,把整个应用从头渲染一遍。我当时是明确知晓这种做法的取舍的——虽然“全量重渲染”听起来有点吓人,但React的虚拟DOM diff机制其实能帮我们优化大部分不必要的DOM更新,再加上合理的组件记忆化处理(比如用React.memo、useMemo这些API),在大型应用里这种模式也能跑起来很顺畅。
而且这种模式还有个好处:不用在各个子组件里写useSelector或者connect,整个应用的状态订阅逻辑都收拢在根层级,维护起来反而简单不少,适合状态变更逻辑相对集中的场景。
内容的提问来源于stack exchange,提问作者James Smith
相关产品推荐
相关产品推荐

