【问题标题】:How to pass Redux Reducer pointer to React Context?如何将 Redux Reducer 指针传递给 React Context?
【发布时间】:2022-02-10 14:50:29
【问题描述】:

简而言之,我试图将 reducer 传递给上下文文件并拥有它,这样如果 reducer 的状态被更新,那么我可以在上下文文件中查看新状态。

这是我的减速器:

function StillUploadReducer(state = true, action){
switch (action.type){
  case 'stillUpload':
    return action.payloadData

  default:
    return state
  }
}

以下是我如何将其传递给 firebase 上下文文件:

const addData = await firebase.addExercise(
      Data,
      props.StillUploadReducer
    );

在上下文文件中,我对值进行了 console.log,我得到了传入的原始值。主要问题是我希望用户能够在我等待时更改减速器的状态正在上传的视频,以便如果状态已更改,则它会反映在上下文文件中。 用户使用操作更改reducer:

const StillUpload = (dataToPass) => {
  return{
    type: 'stillUpload',
    payloadData: dataToPass,
  }
 }

我已经控制台记录了上下文文件之外的减速器的值,我可以看到它正在更新我只是不知道如何看到上下文文件中反映的更改。有没有人有任何想法?提前谢谢。

【问题讨论】:

  • 嗨,不确定这是否会引起您的兴趣stackoverflow.com/questions/68591607/…
  • 好的,所以我通读了那篇文章,我有点困惑。所以首先我将减速器传递给上下文文件中的一个函数,所以我不知道这是否会改变事情。另外我在 mapStateToProps 中调用减速器,所以我应该使用 const StillUpload = useSelector(state => state. StillUploadReducer);

标签: reactjs react-native redux react-redux react-context


【解决方案1】:

reducer 只是一个纯函数。它没有状态,因此将 reducer 作为参数传递给另一个函数无法实现您想要的。 我不确定您所说的“上下文文件”是什么意思或 firebase.addExercise 是什么意思,但您很可能应该改用 useSelector 钩子,该钩子专为组件设计,以便在每次状态的相应部分发生变化时重新呈现. 你也不应该再使用mapStateToProps,它是遗留类组件的遗留API。

【讨论】:

  • 在将我的 mapStateToProps reducer 切换到 useSelector 后,当我在文件外部更新它时,我仍然遇到传递的 reducer 没有在 React Context 文件中更新的问题。仍然感谢您指出滥用 mapStateToProps。
猜你喜欢
  • 2022-01-13
  • 2019-02-17
  • 1970-01-01
  • 2017-08-24
  • 1970-01-01
  • 2019-09-14
  • 2017-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多