不鼓励使用上下文在组件之间进行通信吗?

时间:2018-10-03 09:28:57

标签: reactjs redux react-context

在阅读了有关上下文(https://reactjs.org/docs/context.html)的官方文档后,我觉得它的使用应主要限于以下情况:我们有一些变量,我们可以考虑将“全局”变量发送给以下组件:不同的嵌套级别(例如当前主题,区域设置,当前经过身份验证的用户)。

  

上下文被设计为共享可被视为React组件树(例如当前经过身份验证的用户,主题或首选语言)的数据的“全局”数据。

  

上下文主要用于需要不同嵌套级别的许多组件访问某些数据的情况。谨慎地应用它,因为它会使组件的重用变得更加困难。

我想使用上下文来促进组件树中彼此远离的组件之间的通信。许多用户为此使用Redux(尽管这不是它的主要目的),尽管在与React(通过react-redux软件包)一起使用时,这种方法并没有受到类似的劝阻,但它还是由Context内部提供的。

与redux + react-redux相比,Context是否有任何缺点(除非Redux具有不同的状态更新方式)使我在上述情况下不使用Context?文档说这使组件重用变得更加困难。它是如何做到的,这与redux + react-redux duo也没有关系吗?

2 个答案:

答案 0 :(得分:1)

不鼓励使用它,并且可用于不同嵌套级别的组件通信。

  

与redux + react-redux相比,Context是否有任何缺点(除非Redux具有不同的状态更新方式)使我在上述情况下不使用Context?文档说这使组件重用变得更加困难。

反应上下文可能不太方便调试,因为它当前无法使用Redux devtools。可以观看an issue,但任何可能的解决方案都不能涵盖通过上下文API与交互函数(例如,回调函数)执行的交互。 this modal example,而已调度的Redux动作可以被跟踪。

文档没有解释为什么难以重用,并且“难”是主观的。依赖上下文的组件对组件层次结构中的各个Provider施加了隐藏的依赖关系。它与之松散耦合,但如果没有期望的提供的值,它可能会发生故障;如果没有Provider,则Consumer仍具有undefined值呈现,那么如果没有手动值验证,就无法更改此行为。

答案 1 :(得分:0)

我对您的问题不够清楚。但是请考虑一下您所说的react docs的声明,

  

上下文主要用于需要不同嵌套级别的许多组件访问某些数据的情况。谨慎地应用它,因为它会使组件的重用变得更加困难。

从文档中我看到的是caveat:您可能需要提升状态。

在项目中使用上下文api之前,需要考虑一些事情,如果不这样做,可能会失败。我认为这是因为您可以记住以下语句:“请谨慎应用,因为这会使组件重用变得更加困难”。文档中概述了以下几点,您如何使用上下文api,可以将其视为出于各种需要而重复使用的组件:

您可能显然会感到困难。否则,我可以看到,除了可以使用redux记录器之外,它还可以用于redux。