我对redux有点新意,我需要专家的一些指导。我有一个packageReducer(packageState),如下所示,
const initialState = {
packageList: packageListInitialState,
package: {id:'', name: '', action: '', isReusable: false},
};
export default function packageState( state = initialState, action ) {
switch ( action.type ) {
case FETCH_PACKAGE_LIST_SUCCESS:{
return Object.assign( {}, state, action.payload );
}
case FETCH_PACKAGE_SUCCESS:{
return Object.assign( {}, state, action.payload );
}
default:
return state;
}
}
在我的创建/编辑包表单中,我可以使用packageState.package作为表单的模型对象。或者我应该获取状态的副本并将其用作模型对象? 下面是我在渲染中使用的输入场
<input id="packageName"
name="name"
required
requiredMessage='please enter the name.'
value={ packageState.package.name }
/>
谁能告诉我什么是对的?
答案 0 :(得分:0)
您绝对可以使用从Reducer返回的直接状态属性,但值的任何更改都应触发更新状态的操作,
此外,Package是reducer中的一个数组,您将其视为容器中的对象,这将导致错误。
你在reducer中设置状态的方式是错误的,因为它将替换整个状态而不是状态中的单个键。
将代码修改为
const initialState = {
packageList: packageListInitialState,
package: {id:'', name: '', action: '', isReusable: false},
};
export default function packageState( state = initialState, action ) {
switch ( action.type ) {
case FETCH_PACKAGE_LIST_SUCCESS:{
return Object.assign( {}, state, : {packageList: action.payload} );
}
case FETCH_PACKAGE_SUCCESS:{
return Object.assign( {}, state, {package: action.payload
});
}
case UPDATE_PACKAGE_NAME: {
return Object.assign( {}, state, {package:
Object.assign({}, state.package, {name: action.newName})
});
}
default:
return state;
}
}