我遇到了这段代码的问题。基本上,我想用动作调度更新输入值状态而不是用setState反应方法。到目前为止我有这个,状态总是返回undefined。有人可以帮助我,我坚持这个,我想不出任何我没有尝试的解决方案 这只是与此问题相关的代码片段:
/* SignupForm.js */
<InputField
label="Name"
name="name"
type="text"
floatingLabelText="Name"
value={this.props.values[name]}
onChange={this.onChange}
errorText={this.state.errors.name}
/>
onChange = (event) => {
this.props.onChange(event.target.name, event.target.value);
};
function mapStateToProps(state) {
return {
errorMessage: state.signup.error,
values: state.update.values
};
}
function mapDispatchToProps(dispatch) {
return {
onSave: data => dispatch(registerUser(data)),
onChange: (name, value) => dispatch(formUpdate(name, value))
};
}
/* reducerUpdate.js */
const INITIAL_STATE = {
values:{}
};
const reducerForm = (state = INITIAL_STATE , action) => {
switch(action.type) {
case types.FORM_UPDATE_VALUE:
return Object.assign({}, state, {
values: Object.assign({}, state.values, {
[action.name]: action.value
})
});
}
return state;
};
export default reducerForm;
/*actionUpdate.js */
let _formUpdateValue = (name, value, e) => {
return {
type: types.FORM_UPDATE_VALUE,
name,
value
};
};
export function formUpdate({ name, value}) {
return dispatch => {
dispatch(_formUpdateValue(name, value));
console.log(name, value);
};
}
答案 0 :(得分:0)
不应该state.update.values是state.values.update吗?
function mapStateToProps(state) {
return {
errorMessage: state.signup.error,
values: state.update.values //<- shouldn't this be state.values.update?
};
}
答案 1 :(得分:0)
您的formUpdate
不会返回操作对象,但会调度操作的函数。要处理这种情况,您应该使用thunk
中间件(或类似的东西)。但是,在您的情况下根本不需要它,因为没有异步操作,因此您应该使用_formUpdateValue
作为您的操作创建者(您可以删除当前的formUpdate
函数并重命名_formUpdateValue
到formUpdate
它应该有效。