2017-01-16 56 views
0

我是全新的,以终极版,我试图找出<Provider>connect()之间的关系。<Provider>和React-Redux中的connect()之间有什么关系?

据我所知,connect连接您的组件到商店。然而,在函数参数中没有任何地方你告诉connect在哪里存储!

如果我没有弄错,商店是由<Provider>自动提供给connect()。这对我来说似乎非常直观,因为Redux的entire point是透明的。

所以我的问题是,<Provider>如何在不使用某种全局变量的情况下将店铺传递给connect()?它遍历整个树,搜索connect ed组件,然后注入自己?这不是低效率吗?如果是这样,我将如何在同一个组件树中使用两个不同的商店?

其次,假设我不想使用<Provider>,如何在没有它的情况下使用connect()?即我如何明确地将商店传递给每个连接的组件?

回答

3

<Provider>connectreact-redux模块的一部分。他们一起工作,你不应该使用一个没有其他人。您可以使用自身redux没有react-redux,但你可能最终会重新创建部分或全部该react-redux提供的功能。

react-redux作品使用React context。上下文就像一个隐藏层,用于传递由多个组件共享的变量,而不显式传递它们。要使用上下文,您需要在某处设置上下文,但是,任何想要使用context中的某些组件都需要获取该变量的组件。在react-redux<Provider>基本保存商店的contextconnect提供一种方式来获得从context商店。

如果您还没有,我的recommend these videos开始使用Redux和react-redux从Redux的创建者。

4

redux docs是非常伟大的,有关于Providerconnect()

我们推荐的方法是使用一个特殊的阵营称为<Provider>终极版组件 奇迹般地使商店提供给所有 容器组件的一些信息该应用程序不明确传递它。 你只需要当渲染根组件

本质上,它充分利用了使用context这是React使用一次。根据文档,这允许您通过组件树传递数据,而无需在每个级别手动传递道具。

没有理由为什么你不能明确地传递商店。这里的想法是,它让事情变得更简单。

+0

是的......这是我不喜欢的“魔法”部分。但“利用'上下文'”增加了一些清晰度,所以谢谢你:) – mpen

+0

很酷;如果这回答了您的问题,请将其标记为答案。 @mpen – patrick

相关问题