我通常将代码相关的内容发布在Stack上,但这更多是关于社区的一般思想的问题。
似乎有很多人主张将Redux与React结合使用来管理数据/状态,但是在阅读和学习两者的过程中,我遇到了一些看起来不太正确的事情。
Redux
在此页面底部:http : //redux.js.org/docs/basics/UsageWithReact.html(通过商店),建议使用React“上下文”的“魔术”。
一种选择是将其作为道具传递给每个容器组件。但是,这很麻烦,因为您甚至必须通过演示组件来进行存储,因为它们恰好在组件树的深处呈现了一个容器。
我们建议的选项是使用特殊的React Redux组件,该组件神奇地使商店可用于所有容器组件...
反应
在React Context页面(https://facebook.github.io/react/docs/context.html)上,它在顶部有一个警告:
上下文是一项先进的实验功能。该API可能会在将来的版本中更改。
然后在底部:
正如在编写清晰的代码时最好避免使用全局变量一样,在大多数情况下也应避免使用上下文。
不要使用上下文通过组件传递模型数据。显式地将数据线程穿过树很容易理解...
所以...
Redux建议使用React'Context'功能,而不是store
通过'props' 传递给每个组件。而React建议相反。
Also, it seems that Dan Abramov (the creator of Redux) now works for Facebook (the creator of React), just to confuse me more.
- Am I reading all this right..?
- What is the general current consensus on this issue..?
我对其他人一无所知,但我更喜欢使用react-redux的connect decorator包装我的组件,以便仅将我需要的商店中的道具传递到我的组件中。从某种意义上说,这证明了使用上下文是合理的,因为我没有使用它(而且我通常知道,我负责的任何代码都不会使用它)。
测试组件时,我将测试未包装的组件。因为react-redux仅通过了我在该组件上需要的道具,所以我现在确切地知道在编写测试时需要哪些道具。
我想要指出的是,我从没在代码中看到单词上下文,没有使用它,因此在某种程度上,它不会影响我!这并没有说明Facebook的“实验性”警告。如果上下文消失,在Redux更新之前,我将像其他所有人一样陷入困境。