javascript - 替代 getState 用于 Redux 中的重复变量

标签 javascript redux react-redux

我使用 getState 获取我需要立即包含在每个 api 调用中 的 clientId。问题是这会中断数据流,因为当 clientId 更改时应用程序不会重新呈现。我是否必须在每个需要包含它的组件中手动获取 clientId,或者是否有更好的选择? (clientId也在store中,在用户登录时首先获取)

最佳答案

听起来很适合使用 Context .

这是一个虚构的示例,说明如何在高级别设置客户端 ID,但在嵌套组件中引用它,而不必每次使用 Hooks 查询 Redux 存储:

应用

const ClientContext = React.createContext(null);

function App(props) {
  return (
    <ClientContext.Provider value={props.clientId}>
      <MyApiComponent />
    </ClientContext>
  )
}

const mapStateToProps = getState => ({
  clientId: getState().clientId
})

export default connect(mapStateToProps, {})(App); 

所以我们只需要将 App 连接到商店以检索客户端 ID,然后使用 Context 我们可以使嵌套组件可以访问该值。我们可以利用 useContext将该值拉入每个组件

function MyApiComponent() {
  const clientId = useContext(ClientContext);
  ...
  return <MyNestedApiComponent />;
}

function MyNestedApiComponent() {
  const clientId = useContext(ClientContext);
  ...
}

无论您使用的是函数组件还是类组件,原理都是相同的 - Context 用于将全局状态共享到嵌套组件。

关于javascript - 替代 getState 用于 Redux 中的重复变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56666145/

相关文章:

api - Redux 中间件,POST 请求

android - 如何使用 AsyncStorage React Native 缓存 API 数据

Javascript 对象键按元素 id? (jQuery)

javascript - VueJS - 如何检查匹配值的数组?

javascript - Woocommerce 下单按钮脚本

循环遍历类型的 Typescript 语法——let type Types = typeof myObject[number]

javascript - 即时搜索仅返回一项

javascript - 为什么请求头没有在 react 中的get请求中传递?

reactjs - 将观察者传递给 redux-sagas

reactjs - redux-saga 的单元测试抛出错误 : runSaga must be called on an iterator