与Redux的反应? 那么“背景”问题呢?
我通常在Stack上发布代码相关的东西,但这更多的是关于社区的一般想法的问题。
似乎有很多人主张使用Redux和React来pipe理数据/状态,但是在阅读和学习时,我遇到了一些看起来不太正确的事情。
终极版
在这个页面的底部: http : //redux.js.org/docs/basics/UsageWithReact.html (传递商店),build议使用React“Context”的“Magic”。
一种select是将其作为道具传递给每个容器组件。 然而,它是乏味的,因为你必须通过表示组件来连线存储,只是因为它们碰巧在组件树中渲染容器。
我们推荐的选项是使用一个特殊的React Redux组件来调用所有的容器组件。
应对
在React Context页面( https://facebook.github.io/react/docs/context.html )上面有一个警告:
上下文是一个先进的实验性function。 未来版本中的API可能会发生变化。
然后在底部:
正如在编写清晰的代码时最好避免使用全局variables,在大多数情况下应避免使用上下文…
不要使用上下文通过组件传递模型数据。 明确地将数据通过树显示出来要容易理解
所以…
Reduxbuild议使用React的“上下文”function,而不是通过“道具”将store
传递给每个组件。 而React推荐的则相反。
此外,Dan Abramov(Redux的创造者)现在似乎为Facebook(React的创造者)工作,只是为了让我更加迷惑。
- 我阅读所有这一切的权利..?
- 目前在这个问题上的普遍共识是什么?
上下文是高级function,可能会更改。 在某些情况下,它的便利性大于其缺点,所以像React Redux和React Router这样的图书馆尽pipe有实验性质,仍然select依赖它。
这里的重要部分是词库 。 如果上下文改变其行为, 我们作为图书馆作者将需要调整 。 但是,只要库不要求你直接使用上下文API,你作为用户就不用担心对其进行修改。
React Redux在内部使用上下文,但是在公共API中没有公开这个事实。 所以你应该通过React Redux使用上下文感觉更安全,而不是直接的,因为如果它改变,更新代码的负担将在React Redux上,而不是你。
最终React Redux仍然支持总是将商店作为道具传递,所以如果你想完全避免上下文,你有这个select。 不过,我认为这是不切实际的。
TLDR:除非你真的知道你在做什么,否则不要直接使用上下文。 使用一个恰巧依赖上下文的库是相对安全的。
我不知道别人,但我更喜欢使用react-redux的连接装饰器来包装我的组件,以便只有我需要的商店道具传递到我的组件。 这在某种意义上certificate了上下文的使用是合理的,因为我没有使用上下文(而且我知道,我负责的任何代码都不会使用它)。
当我testing我的组件时,我testing了非包装组件。 因为react-redux只通过了我所需要的道具,我现在知道在写testing的时候我需要什么道具。
我想重点是,我从来没有看到我的代码中的单词上下文,我没有消耗它,所以在一定程度上,这并不影响我! 这并没有提到Facebook的“实验性”警告。如果上下文消失,我会像其他人一样,直到Redux更新。