Неизменный JS - Redux-Saga найти элемент по ключу и обновить значение - PullRequest
0 голосов
/ 10 февраля 2019

Я использую redux-saga и immutable.js в своем приложении реакции.У меня есть массив уведомлений, содержащий данные каждого уведомления, созданного с помощью редукционных действий для всего приложения.

Мой неизменный массив избыточных хранилищ и уведомлений выглядит следующим образом:

global : 
  notifications: 
   0:
    key: 21339298 // random key to use like id
    show: true
    type: success
    message: Operation was successfull
   1: {key..., show...}
   ...

Я хочу найти одно уведомление по «ключу» и обновить его значение «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);
        }
    );

Как мне найти предмет и обновить его какое-то значение?

1 Ответ

0 голосов
/ 11 февраля 2019

Решение состоит в том, чтобы разделить индекс поиска и обновления, сначала найти индекс, а затем использовать его с 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);
...