2017-02-21 26 views
2

Это то, что я не понимаю.Что такое использование immutable.js при использовании redux?

При использовании redux в редукторах используется оператор спреда.

См., Например,

{...state,data : action.payload,fetching:false}

То есть создается новое состояние объекта, а не мутирует правильное состояние правильно? (Пожалуйста, исправьте меня, если я ошибаюсь)

В таких случаях, что такое использование неизменяемых JS ?? Он выполняет те же действия, что и упомянутые выше правильно?

ответ

2

Вы верны, пример, который вы показали, создает новый объект и не изменяет состояние. Это нормально для многих случаев, поэтому, если вы не чувствуете, что ImmutableJS собирается что-то добавить для вас, не используйте его.

ImmutableJS был более полезен, прежде чем распространился оператор в ES6 (я считаю, что это технически still only a proposal). Если вы не используете ES6, то альтернативой является использование Object.assign, который может стать очень грязным, очень быстро, особенно с более вложенными структурами.

ImmutableJS по-прежнему полезен, если вам нужно изменить один узел в глубине дерева состояний, но если это так, вы можете обойти его, структурируя данные по-другому.

+0

Да, есть смешанные преимущества для его использования. Я бы сказал, что это не так беспорядочно, если у вас нормализованная структура данных, и в этот момент Immutable теряет некоторые преимущества простого API, чтобы делать более глубокие изменения, поскольку у вас не будет глубоких деревьев. Однако в остальном я по-прежнему полагаю, что неизменяемые силы вы должны быть неизменными во всех ваших изменениях данных, а также гарантировать, что другие разработчики тоже должны быть, используя удобный API. Я лично бы порекомендовал его – JonE

+0

Да, это замечательный момент. Я очень верим в использование только библиотек, когда это имеет смысл, поэтому, если кодовая база разделяется, то, на мой взгляд, принудительная принудительная совместимость будет разумной причиной ее использования. –

+0

", и в этот момент Immutable теряет некоторые преимущества легкого API, чтобы делать более глубокие изменения, поскольку у вас не будет глубоких деревьев" @ Glitch100 Не могли бы вы рассказать об этом? –

0

Создание неизменного состояния гарантирует, что состояние не будет изменено вне потока потока. В очень сложных структурах с множеством уровней и реквизитов, проходящих вокруг него, это предотвращает случайное мутирование состояния.

1

Когда у вас есть простое состояние, вы можете легко управлять им без дополнительных библиотек.

Но давайте рассмотрим что-то более сложным, как следующий

{ 
    users: { 
    123: { 
     name: 'John', 
     lastName: 'Doe' 
    }, 
    345: { 
     name: 'Bob', 
     lastName: 'Jack' 
    } 
    .... 
    } 
} 

Если вы хотите обновить имя для некоторых пользователей, это будет не так тривиально

return { 
    ...state, 
    users: { 
    ...state.users, 
    [action.userId]: { 
     ...state.users[action.userId], 
     name: action.newName 
    } 
    } 

Довольно много коды, ISN Не так ли? В этот момент вам может понадобиться найти другое решение, и immutable.js может помочь вам сделать то же самое с одной строкой:

state.setIn(['users', action.userId, 'name'], action.newName)