问题标签 [mapstatetoprops]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
879 浏览

react-native - 使用 Redux 工具包中的 createEntityAdapter 时,如何在类组件中将实体作为数组获取?

我的商店中有一个切片,是使用Redux Toolkit中的createEntityAdapter创建的。在函数组件中,您可以将useSelector与从. 但是如何在基于类的组件中将所有实体作为数组(如 selectAll 选择器)?我正在使用connect with mapStateToProps,它只允许我获取实体或 ID 作为道具,但并非所有实体都作为数组按与 ID 排序相同的顺序排序...adapter.getSelectors()

0 投票
0 回答
76 浏览

reactjs - 道具不是用 react-native 和 redux 定义的

我尝试将状态连接到我的一个组件中的道具。当mapPropsToState(state)被调用时,我可以看到这state正是我想要的。但是,当我尝试记录道具时,我收到一条错误消息:

我不明白我在这里做错了什么以及为什么它不起作用。

这是我的减速机:

这是我的组件:

无论我在哪里用断点停止代码执行,道具总是没有定义。那个代码有什么问题?

0 投票
0 回答
103 浏览

javascript - 使用 React 和 Redux 实现文本过滤的正确方法是什么?

我有一个包含 ToDo 列表的组件,上面有一个 SearchBar 来过滤 ToDo。ToDo 存储在 Redux 存储中,因为我在其他组件中也需要它们。但是 SearchTerm 是组件状态的一个属性,因为我只在这个组件中需要它。在componentDidMount钩子中,我调度了一个操作,导致从我的远程服务器获取所有 ToDo。我正在使用mapStateToPropsconnect来自 react-redux。如何在组件中只显示过滤后的 ToDo?在mapStateToProps我无权访问组件状态以使用 SearchTerm 过滤来自 Redux 存储的所有 ToDos 并将过滤的ToDos 道具发送到组件。或者有没有办法订阅组件中对 ToDos 属性的更改,以便在从服务器获取 ToDos 时过滤它们?或者我应该将 SearchTerm 放在 redux 存储中,以便我可以在mapStateToProps函数内部访问它?这个问题最干净的解决方案是什么?下面是一些代码来说明问题:

但是现在,当从服务器获取 toDos 并更新 toDos 属性时,filteredToDos 不会更新。是否有订阅道具更新的钩子或类似的东西?或者我应该将 SearchTerm 放在商店中并mapStateToProps这样写?

首选解决方案是什么?

0 投票
1 回答
51 浏览

reactjs - 无法让 Redux mapStateToProps 在四分之一的组件上工作

我使用 React Redux Saga 并且有 3 个组件mapStateToProps在 Sage 调度到我的reducer. 即使我在组件上放置了一个断点console.log,第四个Component也不会触发:render()render()

并且可以看到Store remoteArticles上面有数据。

我制作了一部 40 秒的影片,展示发生了什么,

  • 开始调试
  • mapStateToProps 与空文章中断
  • Saga 调度时减速器中断
  • mapStateToProps 再次因包含数据的文章而中断
  • 接下来render()应该调用但不是..

https://drive.google.com/file/d/1_QuKQd0YGbMuxrQ-qeQbF5mwlWLk0lly/view

Component不触发的 SliderWrapper.js的完整代码render()

Component使用 `SliderWrapper的 Timeline.js 的完整代码

0 投票
1 回答
32 浏览

reactjs - 使用 mapStateToProps 时未定义道具

在我的应用程序中,我像这样使用 mapStateToPros:

在调试中,当我停下来时,return我可以看到我有一些数据处于状态。

当我在我的 useEffect 函数中停止应用程序并检查 时,props值为propsundefined

这就是我将组件连接到商店的方式:

这是整个组件:

当我在 useEffect 中停止执行时,为什么道具未定义?

0 投票
1 回答
271 浏览

react-redux - Redux,MapStateToProps/useSelector:改变这些值是否安全

MapStateToProps 和 useSelector 都使用类似的回调函数store => store.group 是否可以安全地改变这些值,例如在 MapStateToProps 中像这样:

或在使用选择器:

而使用 useSelector 实际上也可以像这样在组件内部完成:

我的同事做了这样的事情,我不确定你是否应该let在那里使用。我只是感兴趣,如果这是可以接受的方式来处理这个,或者如果这会导致问题?我不需要其他解决方案。我知道如何使用 using 来做到这一点const

0 投票
11 回答
1063 浏览

reactjs - React & Redux:即使使用 mapStateToProps,组件的状态也不会更新

我在下面发布了一个答案,但如果有人能解释为什么这是必要的,你会得到赏金,我经历了一个 redux 教程,感觉我没有了解mapDispatchToProps, 只有mapStateToProps. 如果你能在更深层次上解释究竟是什么mapStateToPropsmapDispatchToProps正在做什么以及它们有何不同,我会给你赏金。


最小可重现示例


我有一个看起来像的 mapStateToProps 函数

在我的MyTab组件中,我有一个按钮,如果这两个字段没有输入任何内容,则该按钮应该是非活动的,但是按钮是否被禁用的状态不会改变

该警报语句在页面刷新时执行,但在我输入数据后不会执行任何时间。我已经检查了 redux 状态是否正在更新。但是按钮不会更新,并且 isDisabled 函数不会运行多次

0 投票
2 回答
39 浏览

reactjs - 重新加载页面时丢失道具状态数据

这是代码:

数据结构:

在加载页面时,我可以加载行,但在重新加载时,我会丢失状态中的数据。这是错误:

TypeError:无法读取未定义的属性“行”

错误页面

0 投票
1 回答
97 浏览

redux - React Redux 访问 mapStateToProps 中的动态过滤状态 - 重新渲染问题

我有一个功能组件,它传递了关于从 redux 存储中提取什么的指令。使用mapStateToProps=(state, ownProps),我可以愉快地从状态(存储)中提取所需的项目 - 但是,整个状态树的任何更改都会触发重新运行 mapStateToProps 和大量重新渲染。

让我开箱。

这是商店部分的快照:

我的父组件将所需的指令传递给子组件。

mapStateToProps 非常简单:

并且工作是在一个简单的函数中完成的:

但是因为我正在创建这个匹配数组,所以我认为 redux 认为我应该订阅树中的每个项目......当我只想对找到的元素进行更改时,在这种情况下:

我尝试使用 reselect 和 rereselect 而不是上面的 getItemsFromState 函数,但结果都相同。该树中的任何更改,从表面[6] 开始都会触发 mapsStateToProps 和重新渲染。

一定有办法解决这个问题,但我无法弄清楚。我尝试使用areStatesEqual,但它只提供nextStateand prevState,我需要ownProps计算相等性。我可能可以使用areStatePropsEqual,但这仅在mapStateToProps不必要地重新计算之后才有效。

一定有办法!

0 投票
1 回答
167 浏览

reactjs - 在 reducer 中更改状态后未调用 MapStateToProps

我有这些文件:

numPadHandler(我的 reducer)、configureStore(我的商店)、TestRedux(我的组件,尝试使用商店)和我的应用程序文件。

减速机:

店铺 :

零件 :

应用程序 :

我不明白为什么当我点击按钮时,reducer 的状态正在改变,但函数 mapStateToProps 没有被再次调用。

页面加载后有我的控制台输出:

一键后:

两次点击后:

单击 2 次后完成控制台输出:

所以你可以看到动作正在发生,reducer 状态正在更新,但组件端没有更新!

你能解释一下为什么吗?

已解决:基于 TLadd 响应的答案:

我的减速器代码是错误的,这是编码的好方法: