当前位置: 首页 > 面试题库 >

与Redux有反应吗?那么“上下文”问题呢?

俞学
2023-03-14
问题内容

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

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

在此页面底部: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建议相反。

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

  • 我读完所有这些吗?
  • 当前在这个问题上的普遍共识是什么?

问题答案:

上下文是一项高级功能,随时可能更改。在某些情况下,它的便利性超过了缺点,因此尽管有实验性质,诸如React Redux和React
Router之类的某些库还是选择依赖它。

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

React Redux在内部使用上下文,但未在公共API中公开这一事实。因此,通过React
Redux使用上下文比直接使用上下文要安全得多,因为如果上下文发生更改,更新代码的负担将落在React Redux上,而不是您。

最终,React Redux仍然支持始终传递存储作为道具,因此,如果您要完全避免上下文,则可以选择。但是我会说这是不切实际的。

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



 类似资料:
  • 我被要求帮助解决一个应用程序问题。 以下是背景——我们有一个JSF1.2应用程序在WAS7中运行。这是一场战争。该团队向同一个应用程序添加了另一个WAR,该应用程序是JSF2.0模块,使用PrimeFaces组件库。因此,它是JSF1.2和JSF2.0的组合。由于WAS 7中没有对JSF 2.0的本机支持,我们将mojarra JAR添加到第二次世界大战的WEB-INF/lib中,并将应用程序类加

  • 我们用的是3.5磅。下面是主变更日志 现在在ChangeLog-V13.0.00.3.xml中,我们有了这些变更集:

  • 问题内容: 我正在使用通过上下文传递的函数。 现在我用。这可行。 如果我需要来自两个不同父组件的函数,该怎么办? 问题答案: 您仍然可以通过16.3 Context API来使用子级功能消费者节点,这是React文档建议的做法: 要在组件的上下文中使用函数,通常将组件包装在HOC中,以便将上下文作为prop传递: 如果您正在运行React 16.8+,则还可以使用钩子更干净地执行此操作,而无需使用

  • 代码错误: py4j。协议Py4JJavaError:调用o490时出错。collectToPython.:组织。阿帕奇。火花SparkException:作业因阶段失败而中止:阶段27.0中的任务0失败了4次,最近的失败:阶段27.0中的任务0.3丢失(TID 98)(172.17.7.28执行器1):java。io。IOException:无法运行程序“python3.6”:CreatePro

  • 问题内容: 我想在串行控制台的上面一行中覆盖一些内容。有没有能让我向上移动的角色? 谢谢。 问题答案: 大多数终端理解ANSI转义码。此用例的相关代码: –将光标移到上一行的开头 –将光标向上移动一行 示例(Python):

  • null null 我也有一个.TS: 错误:错误TS2564:属性“truncator”没有初始值设定项,并且未在构造函数中明确分配。 我也不知道为什么...这是我见过的最简单的东西,但它不起作用…在component.html中需要用#标记html元素,而在component.ts中则需要使用以下方法:@viewchild('truncator',{static:true})truncator