从 redux-saga 函数访问 React 上下文值

Posted

技术标签:

【中文标题】从 redux-saga 函数访问 React 上下文值【英文标题】:Access React context value from redux-saga function 【发布时间】:2020-01-01 19:15:08 【问题描述】:

我有一些由 React Context 通过 React.createContext() 和 Provider 和 Consumer 组件控制的变量。我也在使用 redux-saga,所以我的问题是无论如何都可以在 redux-saga 函数中访问这个上下文值。我正在寻找与 redux-store 一起使用的“yield select”语句。

知道的人请给我解释一下。提前谢谢你。

P/S:目前,我在调度动作时将上下文值传递给动作对象有效负载。所以在 redux-saga 中,我们可以在 action 参数中使用它。我不知道这是否是最佳做法。

【问题讨论】:

【参考方案1】:

编辑:现在有一个包可以让您轻松获取上下文,react-outside-call

您可以保留提供程序组件的外部引用,并从中获取状态。

这样的……

提供者组件

class AppProvider extends Component 
  state = 
    number: 10,
  

  render() 
    return (
      <AppContext.Provider value=this.state>
        this.props.children 
      </AppContext.Provider>
    )
  

Apps 主入口文件,或者您引用该提供程序实例的任何位置。

let appProviderRef
export const getProviderState = () => appProviderRef.state

ReactDOM.render(
  <AppProvider ref=ref => appProviderRef = ref>
    <App />
  </AppProvider>
, document.getElementById('root'))
 

您现在可以从您的 redux sagas(或您想要的任何地方)中获取状态,同步调用 getProviderState

【讨论】:

上下文的重点是为特定的子树提供替代值,据我所知,这只会获取上下文的第一个值,它可以只使用普通的 js 模块变量并按需导入. 但是如果我需要访问真正的反应上下文(例如路由器上下文......)呢?

以上是关于从 redux-saga 函数访问 React 上下文值的主要内容,如果未能解决你的问题,请参考以下文章

在 React 中使用 Redux-Saga/Fetch-mock 测试重定向路由

React 通用 redux-saga 内存泄漏

无法使用 redux-saga 从服务器产生 json 响应

如何使用 redux-saga 在 API 响应中检查过期的 JWT 令牌?

react-hot-loader 与外部 configureStore 使用 redux-saga 抛出“regeneratorRuntime 未定义”

如何将 redux-sagas 与 react-hooks 一起使用