我试图创建一个没有ES6好处的减速器。这是一个旧的PHP应用程序,没有构建过程可用于转换。
我正在初始化状态:
let defaultState = {
accountTypes: {
personal: {
selected: false,
checking: {
selected: false
},
savings: {
selected: false
}
},
business: {
selected: false,
checking: {
selected: false
},
savings: {
selected: false
}
}
}
};
这里是减速器,然后是商店初始化:
function reducer(state, action) {
switch (action.type) {
case 'TOGGLE_ACCOUNT_TYPE':
console.log(state.accountTypes);
// {
// business: {selected: false, checking: {…}, savings: {…}}
// personal: {selected: true}
// }
console.log(action.payload);
// {
// personal: {selected: true}
// }
let blah = Object.assign({}, state, {
accountTypes: Object.assign({}, state.accountTypes, action.payload)
});
console.log(blah.accountTypes);
// {
// business: {selected: false, checking: {…}, savings: {…}}
// personal: {selected: true}
// }
return blah;
default:
return state;
}
}
const store = Redux.createStore(reducer, defaultState);
let state = store.getState();
稍后在jQuery的document.ready
中订阅状态:
store.subscribe(function () {
console.log(state.accountTypes);
// {
// business: {selected: false, checking: {…}, savings: {…}}
// personal: {selected: false, checking: {…}, savings: {…}}
// }
您可以看到状态未使用操作有效负载更新。
答案 0 :(得分:2)
我想我只是偶然发现了答案。发布问题使松散的东西感到震惊。我在jQuery操作中使用了过时的状态变量。
store.subscribe(function () {
// update the state var
state = store.getState();
如果有一种更好的方法来使用状态变量而不必手动刷新它,请发布另一个答案。