Предположим, что у нас есть такой магазин:
// initialState.js file
export default = {
_token: 'a hashed long string from server',
user: {
key: value,
... many more
}
.. many more
}
а вот редуктор ТОЛЬКО для токена:
import * as types from '../actions/actionTypes'
import initialState from './initialState'
export default function tokenReducer(state = initialState._token, action) {
switch(action.type) {
case types.CHANGE_TOKEN:
console.info(action.payload) // a new hashed long string from server
return action.payload // payload is a token string that comes from server
default:
return state
}
}
Это нормально?
Я имею в виду, что я использовал ТОЛЬКО часть хранилища initialState.token в моем редукторе, чтобы предотвратить возврат всего состояния с помощью Object.assign или оператора распространения, я просто обновил строку (токен).
Это правильный способ изменить только одно строковое значение из магазина или я должен вернуть все состояние и использовать Object.assign, как показано ниже?
import * as types from '../actions/actionTypes'
import initialState from './initialState'
export default function tokenReducer(state = initialState._token, action) {
switch(action.type) {
case types.CHANGE_TOKEN:
console.info(action.payload) // a new hashed long string from server
return {
...state ,
Object.assign({}, state, {_token: action.payload})
}
default:
return state
}
}
В настоящее время я использую первый редуктор, и я думаю, что с ним что-то не так, я не знаю почему, но я думаю, что что-то не так, поэтому я разместил этот вопрос здесь, первый редуктор - это правильный способ справиться с выпуск или второй ...
Второй не работает как есть. Вы неправильно манипулируете государством. У вас есть один кусок состояния: строка токена. Ни предметов, ни других вещей. Итак, если вы хотите сохранить состояние строки токена, просто выберите первую, в этом нет ничего плохого. Но, как я сказал в предыдущем комментарии, мы не можем быть уверены, не увидев всю структуру состояний вашего приложения. Например, как вы планируете использовать другие части вашего исходного состояния?
Если вы передаете это состояние другому редуктору, то почему вы сохраняете _token там, если вы не изменяете его в другом редукторе?
На самом деле в первом подходе нет ничего плохого.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Ваш первый случай немного отличается от второго. Прежде всего, если вы используете такой редуктор, ваше состояние
tokenReducerв первом случае будет просто нить. Но во втором случае вы возвращаете объект и пытаетесь распространить свое состояние, строку! и какой-то неправильный объектный ключ назначен, нет ключа (строкаObject.assign). Так что, вероятно, вы здесь не об этом думаете. Возможно, вы можете использовать редуктор для одного такого свойства состояния, как это, но как устроен дизайн вашего приложения, как вы будете использовать другие части состояния?