#javascript #redux #ecmascript-6 #redux-toolkit #immer.js
Вопрос:
У меня есть геттер, который возвращает значение внутри фабрики, но когда redux-took изменяет мое значение, геттер не обновляется. Я попробовал это без redux-инструментария, и он работает нормально.
В моем редукторе setBalanceVisibility
, когда значение isVisible
изменяется, получатель formattedValueSignal
не обновляется.
/*Redux*/
const initialState = {
current: userFactory(),
isLoading: false,
hasError: false,
}
const userSlice = createSlice({
name: '@user',
initialState,
reducers: {
setBalanceVisibility(state) {
state.current.balance.isVisible = !state.current.balance.isVisible
},
},
})
/*Factory*/
export function userFactory(object) {
if (!object) {
return null
}
const { name, email, accountBalance } = object
return {
name,
email,
balance: balanceFactory(accountBalance),
}
}
export function balanceFactory(object) {
if (!object) {
return null
}
const { value, formattedValue, isVisible } = object
return {
value,
formattedValue,
isVisible,
get formattedValueSignal() {
if (this.isVisible) {
return this.formattedValue
}
return '-- --'
},
}
}
Комментарии:
1. Это очень странный способ подхода к функциям селектора. Похоже, что balanceFactory отображает состояние на некоторые свойства. Когда состояние меняется, вы заменяете свой баланс на баланс для нового состояния? Если нет, то, конечно, он не реагирует. Но, честно говоря, это так странно, что я не понимаю, где и как вы это используете.