【问题标题】:SOLVED: useSelector of React Redux don't update state of store on expo react-native已解决:React Redux 的 useSelector 不会在 expo react-native 上更新 store 的状态
【发布时间】:2020-09-25 21:52:52
【问题描述】:

我在网上制作了相同的模型并且它有效,我尝试使用 Redux 的 shallowEqual 作为 useSelector 函数的第二个参数,以及 lodash 库的 _.isEqual ,就像 Hooks 部分的 Redux 文档中的那样,但不要工作。

预期行为:
在调度操作中,带有 useSelector 的组件必须带来更新的状态。

会发生什么:
组件带来初始状态为空。

版本:

"Expo": "~37.0.3"
"react-native": "37.0.1",
"react-redux": "^7.2.0",
"redux": "^4.0.5"

编辑:

我尝试复现类似于同样问题的零食的结构,这里是链接:https://snack.expo.io/@danieltfischer/useselector

已解决: 我忘记了动作类型的“导出”:export const ADD_MED ='ADD_MED' 我专注于代码,并没有意识到我没有公开动作的类型。再次感谢。

【问题讨论】:

  • 您的状态仅在 handleSubmit 上更新。除非您调用 handleSubmit,否则它应该为空。
  • 我调用了handleSubmit 函数,当我回到仪表板屏幕时,状态保持为空。日志上也没有任何变化。
  • 您是否在某处使用从 useSelector 获得的状态,您如何确定它没有带来最新状态?
  • 丹亚尔,我是。我将状态作为“数据”传递给 FlatList 组件,它还接收“数据”作为属性。我在表单和仪表板上使用了 useSelector 并放置了一个日志以确保他们会收到更新的状态,并且正如我所说,我正在使用 flatList 组件中的状态来呈现来自状态的项目跨度>

标签: react-native redux react-redux expo hook


【解决方案1】:

我查看了您的代码,发现了一个错误。

您没有从actions 文件夹中导出您的操作类型字符串常量:

// What you are doing
const CREATE_MED = 'CREATE_MED';

// What you need to be doing
export const CREATE_MED = 'CREATE_MED';

修复此问题后,应用程序正在运行,一旦我发送操作,它就会为我恢复最新状态并更新平面列表。

尝试进行此更改,看看是否可以解决问题。

它不起作用的原因是因为每次调用 reducer 函数时,CREATE_MED 操作常量都是未定义的,所以它总是使用返回先前状态的默认选项。

【讨论】:

  • 我什至感到羞愧。非常感谢,我没有意识到这是一个愚蠢的错误,
  • 我很高兴它修复了这个错误,尝试使用Redux Devtools,这种错误很容易陷入其中。我认为使用 ESLint auto 之类的东西可以捕获这些导入/导出错误。您可以将此答案标记为解决方案,谢谢。 :)
  • 我从另一个项目中复制了 eslintrc.json 并忘记在项目开始时激活它,愚蠢的错误......我已经添加了您的答案作为解决方案。再次感谢您!
猜你喜欢
  • 1970-01-01
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-18
相关资源
最近更新 更多