state 1
, state 2
, state 3
, state 4
, ...
и так далее , где каждое состояние может быть аналогично последним, но каждый представляет собой отдельную часть данных. Эта непреложность, по сути, является тем, что обеспечивает такие функции, как отладка во время путешествия, о которой вы, возможно, слышали. Redux не активно применяет неизменность государства в своем магазине или редукторах, эта ответственность ложится на программиста. К счастью, JavaScript (особенно ES6) предоставляет несколько полезных инструментов, которые можно использовать для обеспечения неизменности вашего состояния, будь то string
, number
, array
или object
. Обратите внимание, что строки и числа являются примитивными значениями и неизменны по своей природе. Другими словами, 3 всегда 3. Вы не можете изменить значение числа 3. array
или object
, однако, являются изменяемыми. На практике ваше состояние, вероятно, будет состоять из array
или object
, поскольку они являются полезными структурами данных для представления многих типов информации. store
и reducer
для управления предметами. Завершите запись случая ADD_TO_DO
в редукторе, чтобы добавить новое дело в состояние. Есть несколько способов сделать это со стандартным JavaScript или ES6. Посмотрите, можете ли вы найти способ возврата нового массива с элементом из action.todo
добавленным в конец. todos
в редакторе кода.'
testString: 'assert((function() { const todos = [ "Go to the store", "Clean the house", "Cook dinner", "Learn to code" ]; const initialState = store.getState(); return Array.isArray(initialState) && initialState.join(",") === todos.join(","); })(), "The Redux store should exist and initialize with a state equal to the todos
array in the code editor.");'
- text: addToDo
и immutableReducer
должны быть функциями.
testString: 'assert(typeof addToDo === "function" && typeof immutableReducer === "function", "addToDo
and immutableReducer
both should be functions.");'
- text: При ADD_TO_DO
действия типа ADD_TO_DO
в хранилище Redux следует добавить объект todo
и НЕ должен мутировать состояние.
testString: 'assert((function() { const initialState = store.getState(); const isFrozen = DeepFreeze(initialState); store.dispatch(addToDo("__TEST__TO__DO__")); const finalState = store.getState(); const expectedState = [ "Go to the store", "Clean the house", "Cook dinner", "Learn to code", "__TEST__TO__DO__" ]; return( isFrozen && DeepEqual(finalState, expectedState)); })(), "Dispatching an action of type ADD_TO_DO
on the Redux store should add a todo
item and should NOT mutate state.");'
```