与 Redux 反应? “上下文”问题呢?

新手上路,请多包涵

我通常会在 Stack 上发布与代码相关的内容,但这更多的是关于社区的一般想法的问题。

似乎有很多人提倡使用 Redux 和 React 来管理数据/状态,但是在阅读和学习两者的过程中,我遇到了一些看起来不太正确的事情。

终极版

在此页面的底部: http ://redux.js.org/docs/basics/UsageWithReact.html(通过商店)它建议使用 React ‘Context’ 的“魔法”。

一种选择是将它作为 prop 传递给每个容器组件。然而,它变得乏味,因为您甚至必须通过表示组件连接存储,只是因为它们恰好在组件树深处呈现容器。

我们推荐的选项是使用一个特殊的 React Redux 组件调用来神奇地使商店对所有容器组件可用……

反应

在 React 上下文页面 ( https://facebook.github.io/react/docs/context.html ) 顶部有一个警告:

上下文是一项高级和实验性功能。 API 可能会在未来的版本中发生变化。

然后在底部:

正如在编写清晰的代码时最好避免全局变量一样,在大多数情况下你应该避免使用上下文……

不要使用上下文通过组件传递模型数据。通过树显式地线程化数据更容易理解……

所以…

Redux 建议使用 React 的“上下文”功能,而不是通过“道具”将 store 向下传递到每个组件。而 React 则相反。

另外,似乎 Dan Abramov(Redux 的创建者)现在为 Facebook(React 的创建者)工作,只是让我更加困惑。

  • 我读得对吗..?
  • 目前关于这个问题的普遍共识是什么……?

原文由 Stephen Last 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 339
2 个回答

上下文是一项高级功能,可能会发生变化。在某些情况下,它的便利性超过了缺点,因此尽管具有实验性质,但一些库(如 React Redux 和 React Router)选择依赖它。

这里的重要部分是单词 libraries 。如果上下文改变了它的行为, _我们作为图书馆作者将需要调整_。但是,只要库不要求您直接使用上下文 API,作为用户的您就不必担心对其进行更改。

React Redux 在内部使用上下文,但它不会在公共 API 中公开这一事实。所以你应该觉得通过 React Redux 使用上下文比直接使用上下文更安全,因为如果它发生变化,更新代码的负担将落在 React Redux 而不是你身上。

最终 React Redux 仍然支持始终将 store 作为 prop 传递,所以如果你想完全避免上下文,你可以选择。但是我会说这是不切实际的。

TLDR:除非您真的知道自己在做什么,否则请避免直接使用上下文。使用恰好在内部依赖上下文的库是相对安全的。

原文由 Dan Abramov 发布,翻译遵循 CC BY-SA 3.0 许可协议

我不了解其他人,但我更喜欢使用 react-redux 的 connect 装饰器来包装我的组件,这样只有我需要的商店中的 props 才会传递到我的组件中。这在某种意义上证明了上下文的使用是合理的,因为 没有使用它(而且我知道,作为一项规则,我负责的任何代码都不会使用它)。

当我测试我的组件时,我会测试未包装的组件。因为 react-redux 只传递了我在该组件上需要的 props,所以我现在确切地知道我在编写测试时需要什么 props。

我想重点是,我从来没有在我的代码中看到上下文这个词,我不使用它,所以在某种程度上,它不会影响我!这并没有说明 Facebook 的“实验性”警告。如果上下文消失了,在 Redux 更新之前,我会和其他人一样被搞砸。

原文由 mejdev 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏