Sto*_*ace 5 javascript reactjs redux react-redux
我正在阅读几篇关于如何防止react-redux
重新渲染整个页面的文章,当只有一件小事发生变化时。一篇文章建议不要将所有东西都包装成一个大的container
(如图 1 所示),而是将所有东西都包装成较小的containers
(如图 2 所示)。如果Container 2
, onlyComponent 2
和Component 3
中的某些内容发生变化,则会重新渲染。Component 1
不会重新渲染。
我有以下问题:
container
(如图底部的伪代码所示)。这是普遍做法吗?Container1
在Container2
,我需要连接这两个全球性的状态。对我来说,感觉它可能会很快变得混乱。什么是从哪里来的?react
方法shouldComponentUpdate()
?使用这种Big Container
方法我会如何不同,哪些Component
应该重新渲染?!如果在 中实现Components
,它们将不再“转储”,因为它们需要访问全局状态以决定是否重新渲染。我将无法重用,Components
因为每个人Component
都有自己的特殊情况,何时重新渲染,何时不重新渲染。我不确定何时何地使用shouldComponentUpdate()
请注意,我对此很陌生,可能做出了错误的假设等。我基本上想知道如何不重新渲染整个页面,当只需要更新一件事时。问谷歌的结果差异很大。
你的第二种方法是要走的路,尽管你对全球国家的定义有点误导。基本上,您希望拥有一个“全局状态”。这就是所谓的“店”。所有需要接收部分存储的组件都使用react-redux'connect
函数连接到它。
现在,connect(...)
它实际上是一个 HOC,它包装您的组件并仅将存储的定义部分传递给它。这样,组件(及其子组件)仅在其定义的 props 更改时重新渲染。
不要害怕更频繁地使用 connect()。您只需要小心将商店的哪些部分传递给容器,这正是性能可能成为问题的地方。
这应该回答你的第一个问题。第二个是设计问题。根据您的应用程序的方式以及数据源的结构方式进行设计。如前所述,您希望将最少的 props 传递给组件,这样当商店的其他部分发生更改时它就不会重新渲染。
对于第三个问题,您首先必须了解“哑组件”当然可以从其父组件/容器接收 props。愚蠢只是意味着他们无法决定是否应该重新渲染。哑组件用于呈现/显示数据,仅此而已。
假设您有一个非常简单的商店:
const store = {
posts: {
all: [],
isFetching: false,
err: {},
}
}
Run Code Online (Sandbox Code Playgroud)
然后将容器连接到它,如下所示:
function mapStateToProps(store) {
return {
posts: store.posts.all,
isFetching: store.posts.isFetching,
err: store.posts.err,
};
}
@connect(mapStateToProps)
Run Code Online (Sandbox Code Playgroud)
这个容器有三个可以使用的哑组件:
一个帖子组件,它接收所有帖子并使用另一个愚蠢的子组件显示它们(伪代码,你明白了):
function posts = (posts) => {
posts.map((post, id) => (
<otherDumbComponent post={post} key={id} />
));
}
Run Code Online (Sandbox Code Playgroud)一个在 isFetching 时仅显示一个微调器
现在,如果只有 isFetching 发生了变化,则只有第二个组件会重新渲染,仅此而已。哦,shouldComponentUpdate()
您可能不想使用它,因为,嗯..有很多关于它的好博客文章。
归档时间: |
|
查看次数: |
3534 次 |
最近记录: |