reactjs - 创建操作以更改状态中的键时,Redux 操作和减速器的奇怪行为
问题描述
我为标题道歉。
无论如何,当我创建某种类型的操作时,我在 Redux 开发工具中看到了奇怪的行为。显示我的意思的唯一方法是通过一个例子。
假设我有一个具有这种结构的状态:
const INITIAL_STATE = {
isFile: false,
isUploaded: false,
isUser: true
};
由于状态内只有键没有嵌套对象,我想我可以只创建一个操作来更改所有键,而不是为每个特定键执行不同的操作。
所以reducer变成了:
const CHANGE_KEY = "CHANGE_KEY";
export default (state = INITIAL_STATE, action) => {
switch (action.type) {
case CHANGE_KEY:
return {
...state,
[action.payload.key]: action.payload.value,
};
default:
return state;
}
};
const changeKeyInState = (key, value) => ({ type: CHANGE_KEY, payload: { key, value } });
现在所有这些都有效。所以我可以调用一个动作来改变状态中的简单键值对。但是,假设我有不同的 reducer,它们通过自己的 key 更改操作来处理状态的不同区域。当我查看 Redux 开发工具时,它会显示添加到不应该存在的状态的键,这没有意义。例如,如果我有一个用于登录的减速器,该减速器具有更改isLoggedIn
密钥的操作,则该密钥也会添加到上述减速器中,这没有任何意义。
这是不同减速器的代码:
const CHANGE_LOGIN_KEY = "CHANGE_LOGIN_KEY";
export default (state = INITIAL_STATE, action) => {
switch (action.type) {
case CHANGE_LOGIN_KEY:
return {
...state,
[action.payload.key]: action.payload.value,
};
default:
return state;
}
};
const changeKeyInLoginState = (key, value) => ({ type: CHANGE_LOGIN_KEY, payload: { key, value } });
我只在 Redux 开发工具中看到这一点。我不知道发生了什么事。谁能帮我弄清楚问题是什么?
解决方案
推荐阅读
- android - Android 蓝牙 txpower
- iframe - indexedDB 可以在 Safari 的 iframe 内工作吗?
- c# - C# 仅指定第二个可选参数并使用第一个的默认值
- microsoft-graph-api - Microsoft Graph 是否具有 lastModifiedDateTime 来检测最新的实体更改?
- reactjs - React Native 自动补全 IntelliJ
- sql-server - SSMS 无法识别加入语法
- typescript - 我可以在 Typescript 中提取类型的嵌套结构以使用它来声明新类型吗?
- nunit - 你如何设置 Visual Studio for Mac 和 NUnit
- kubernetes - 如何解决临时本地存储问题?
- java - 从 Spark 读取 Teradata 时出错。它加载了表并显示架构但未能给出数据集结果