javascript - Redux 中的选择器 - React 组件了解 redux 状态意味着什么?
问题描述
选择器(除其他原因外)用于隐藏组件的状态。这个说法正确吗?
假设我有2 个减速器:
当前用户:
{
currentUserId: 'abc'
}
所有用户
{
byId: {
{
abc: {
name: "John"
age: 21
}
def: {
name: "Dave"
age: 51
}
ghi: {
name: "Gunners"
age: 98
}
}
},
allIds : ['abc','def','ghi'] //this is a list; users have a certain order, that is preserved here
}
假设我现在想获得一些派生状态。我将使用选择器,这样我的组件就不必直接处理 reducers 状态。这(除了记忆/性能)是选择器背后的基本原理的一部分,对吗?所以我实现了一个选择器,它将用户返回到我的mapStateToProps
函数。
但是:现在我的组件仍然需要知道用户对象的样子?例如,存在obj.name
并且obj.age
- 那么了解状态是如何以及从哪里开始的以及它在哪里结束呢?或者,或者,我更可能认为,我在这里误解了什么?
解决方案
我对你的问题有点困惑。无法评论...使用选择器是个好主意,因为它可以使代码更易于管理,或者您只需要状态中更具体的东西。
例如,如果您有一个包含已读和未读通知的通知缩减程序,您可以创建一个选择器来处理删除已读通知,这样您就可以只显示未读通知。
所以 mapStateToProps 会推送给它的任何东西。从选择器返回的任何内容都将被推送到组件的 props 中。
如果您希望它只知道姓名和年龄,您可以很容易地做到这一点,而无需创建单独的选择器。
// taking into consideration the code you posted
const mapStateToProps = (state) => ({
users: state.allUsers.byId
})
现在 mapStateToProps 只会知道名字和年龄。
推荐阅读
- node.js - 使用 Mongoose(MongoDB) 实现 addFields
- javascript - 更新 ProgressBar.js 圈子的现有文本
- python - 使用 Python 的析构函数中的分段错误
- python - 嵌入式跨度的刮擦问题。不要打印嵌套的孩子
- azure-devops - 即使在启用“基本 + 测试计划”的试用版后也无法使用 azure 测试计划
- r - R,如何使用变量在ggplot2中选择数据框的不同列?
- java - 如何通过@ConfigurationProperties 注解获取属性以动态创建一些bean并将其提供给spring?
- python - 在 python 中绘制箱线图时,没有标签句柄以输入图例错误
- r - 无法使用 download.file 功能从 Internet 下载已完成的 gz 文件
- python - 合并具有多列条件和比较的数据框