Immutable js - Redux-Saga 按键查找项目并更新值
Immutable js - Redux-Saga find item by key and update value
我在我的 React 应用程序中使用 redux-saga 和 immutable.js。
我有通知数组保存由整个应用程序的 redux 操作创建的每个通知的数据。
我的不可变 redux 存储和通知数组是这样的:
global :
notifications:
0:
key: 21339298 // random key to use like id
show: true
type: success
message: Operation was successfull
1: {key..., show...}
...
我想找到 "key" 的单个通知并将其 "show" 值更新为 false。
我阅读了 immutable.js 文档,但很难理解。
所以我尝试了下面的代码片段。但是我没有得到结果。
return state
.updateIn(['notifications',
ns => ns.findIndex(function (item) {
return item.get("key") === action.notificationId;}
), 'show'], false
);
return state
.update(
list.findIndex(function (item) {
return item.get("key") === action.notificationId;
}), function (item) {
return item.set("show", false);
}
);
我如何找到一个项目并更新它的某些值?
解决方法是将查找索引和更新分开,先查找索引,再与setIn
一起使用。下面是解决方法。
case NOTIFY_HIDE:
let notifications = state.get('notifications');
let notificationIdx = notifications.findIndex(function (item) {
return item.get('key') === action.notificationId;
});
return state
.setIn(['notifications', notificationIdx, 'show'], false);
我在我的 React 应用程序中使用 redux-saga 和 immutable.js。 我有通知数组保存由整个应用程序的 redux 操作创建的每个通知的数据。
我的不可变 redux 存储和通知数组是这样的:
global :
notifications:
0:
key: 21339298 // random key to use like id
show: true
type: success
message: Operation was successfull
1: {key..., show...}
...
我想找到 "key" 的单个通知并将其 "show" 值更新为 false。
我阅读了 immutable.js 文档,但很难理解。 所以我尝试了下面的代码片段。但是我没有得到结果。
return state
.updateIn(['notifications',
ns => ns.findIndex(function (item) {
return item.get("key") === action.notificationId;}
), 'show'], false
);
return state
.update(
list.findIndex(function (item) {
return item.get("key") === action.notificationId;
}), function (item) {
return item.set("show", false);
}
);
我如何找到一个项目并更新它的某些值?
解决方法是将查找索引和更新分开,先查找索引,再与setIn
一起使用。下面是解决方法。
case NOTIFY_HIDE:
let notifications = state.get('notifications');
let notificationIdx = notifications.findIndex(function (item) {
return item.get('key') === action.notificationId;
});
return state
.setIn(['notifications', notificationIdx, 'show'], false);