【问题标题】:Do createContext() and useReducer() receive the same 'initialState' object?createContext() 和 useReducer() 是否接收相同的“initialState”对象?
【发布时间】:2020-06-18 02:07:55
【问题描述】:

尝试 typescript + react hooks + context api,我注意到createContextuseReducer 都需要'initialState' 的参数。定义一次并将同一个对象传递给两者感觉很奇怪,这让我想知道有什么区别。

【问题讨论】:

  • createContextuseReducer 完全没有任何关系。上下文和存储/减速器是完全不同的东西。有一些方法可以一起使用它们,但不应将它们混为一谈。

标签: typescript react-hooks react-context


【解决方案1】:

有什么区别?

嗯,上下文是一种特殊的方式,可以将父组件的值共享给深度嵌套的子组件。

https://reactjs.org/docs/context.html

useReducer 完全是另一回事,它是一种使用转换状态的纯函数来管理 React 状态的方法。

https://reactjs.org/docs/hooks-reference.html#usereducer

他们之间没有任何关系。它们完全独立使用,尽管在某些情况下您会一起使用它们,但 React 没有任何内在的东西可以将它们链接在一起。

因此,它们需要不同的initialState 参数,因为它们是不同的系统,具有不同的要求和不同的用途。

【讨论】:

  • 感谢您的回答!我想我很困惑为什么createContext 需要状态(请参阅github.com/DefinitelyTyped/DefinitelyTyped/pull/…),因为状态已传递到提供程序元素(可能使用来自useReducer 的返回值)
  • 传递给上下文提供者的值甚至不需要是“状态”。它实际上可以是一个const 字符串,或者一个预定义的数字,或者其他任何东西。 value 只是一个抽象的 JavaScript “值”,它可以是任何东西。碰巧从某种状态设置该值 - 无论是useState,或类组件this.state,或redux 存储,或useReducer,或其他任何东西 - 使它更加强大和灵活。
猜你喜欢
  • 2019-07-13
  • 2022-11-30
  • 2021-04-26
  • 2011-04-06
  • 2020-07-09
  • 1970-01-01
  • 1970-01-01
  • 2017-01-10
  • 1970-01-01
相关资源
最近更新 更多