与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更新。