2016-05-17 3 views
0

Я пытаюсь добавить immutableJS в Mern.io. Когда я пытаюсь удалить сообщение из своего списка сообщений, тогда установите его в моем состоянии, состояние не обновляется.Почему мое состояние не изменяется с помощью неизменяемого JS?

case ActionTypes.DELETE_POST : 
    const removeArray = state.get('posts') 
       .filter((post) => post._id !== action.post._id) 
    console.log(removeArray.length) 
    state.set('posts', removeArray) 
    console.log(state) 
    return state; 

В этом примере, если у меня есть массив из 5, я должен быть в состоянии отфильтровать его, то набор «сообщения» снова новый массив. Я не понимаю, что я могу удалить объект из массива, а removeArray будет меньше, чем state.post. Но при консолидации состояния журнала это одно и то же. Что мне не хватает?

ответ

6

Когда вы вызываете state.set(...), он возвращает новый объект. Оригинал state не изменился. Я изменил 3 строки в фрагменте кода:

case ActionTypes.DELETE_POST : 
    const removeArray = state.get('posts') 
       .filter((post) => post._id !== action.post._id) 
    console.log(removeArray.length) 
    const newState = state.set('posts', removeArray) // assign to another variable 
    console.log(newState) // and log here 
    return newState; // and you'll probably want to return the new state 
+0

Он также имеет смысл переключиться на 'state.update («сообщения», ...)' – zerkms

+3

Это вид весь смысл использования Immutable.js :) – RJo

+0

@zerkms Спасибо за обновление фрагмента! – franky