Reactjs React-redux-向状态树对象中的数组添加多个项的问题
我正在研究redux并将名称添加到数组中。下面的代码可以工作(有点!) 我有几个问题Reactjs React-redux-向状态树对象中的数组添加多个项的问题,reactjs,redux,react-redux,Reactjs,Redux,React Redux,我正在研究redux并将名称添加到数组中。下面的代码可以工作(有点!) 我有几个问题 我知道建议在每次状态通过reducer时创建一个新的状态树对象,但是我认为即使我更改传入的状态对象,它仍然应该工作。 在console.log(store.getState())下面的我的代码中可以工作但如果我使用state.names.push(action.name),则不能使用 如果我添加另一个store.dispatch(action)代码将不起作用 store.dispatch({type:'ADD_
console.log(store.getState())下面的我的代码中如果我使用var newArr=state.names.concat(action.name),则code>可以工作代码>但如果我使用state.names.push(action.name),则不能使用代码>
store.dispatch(action)
代码将不起作用
store.dispatch({type:'ADD_NAME',NAME:'PhantomTwo'})代码>
const initialState = {
names: []
}
function namesApp(state = initialState, action) {
switch(action.type) {
case 'ADD_NAME':
var newArr = state.names.concat(action.name);
return newArr;
default:
return state;
}
}
let store = createStore(namesApp);
store.dispatch({
type: 'ADD_NAME',
name: 'Phantom'
});
console.log(store.getState()); //returns `["Phantom"]`
[].concat
返回一个新数组。但您所在的州是{name:[]}
。尽管返回了具有新名称的新构建对象,但上面的代码返回了新名称数组
香草溶液
const initialState = { names: [] };
function namesApp(state = initialState, action) {
switch(action.type) {
case 'ADD_NAME':
var newArr = state.names.concat(action.name);
return {
...state,
names: newArr
};
default:
return state;
}
}
不变性助手
对于这种类型的工作,我将使用不变性助手
import u from 'immutability-helper';
function namesApp(state = initialState, action) {
switch(action.type) {
case 'ADD_NAME':
return u(state, {
names: {
$push: action.name
}
});
default:
return state;
}
}
了解如何使用
不变性助手
这是数组
对象可变性的行为
由于React
高度关注重新渲染的状态更改,因此我们需要考虑可变性
下面的代码片段解释了数组的易变性
设x=[];
设y=x;
控制台日志(x);
控制台日志(y);
y、 推动(“第一”);
控制台日志(x);
控制台日志(y);
设z=[…x]//创建新引用
控制台日志(z);
x、 推(“第二”);
控制台日志(x)//更新
控制台日志(y)//更新
控制台日志(z)//未更新
我认为原因是前几行的文字有误。我不知道如何在不覆盖前几行的情况下,动态地保持每个更改的状态。成功了,谢谢!