Redux:我们可以使用Redux状态对象作为表单模型对象吗?

时间:2017-06-28 12:59:19

标签: forms reactjs redux

我对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 }
/>

谁能告诉我什么是对的?

1 个答案:

答案 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;
    }
}