我有一个名为addContactForm
. 此表单通过插件侦听我的应用程序中的某些操作。请参阅下面的代码以获取说明:
/reducers/index.js
import { combineReducers } from 'redux';
import { reducer as reduxFormReducer } from 'redux-form'
import AddContactFormPlugin from './add-contact-form-plugin';
const rootReducer = combineReducers({
form: reduxFormReducer.plugin({
addContactForm: AddContactFormPlugin
})
});
export default rootReducer;
/reducers/add-contact-form-plugin.js
import { SET_CURRENT_CONTACT, CLEAR_CURRENT_CONTACT } from '../constants';
export default function (state, {type, payload}) {
switch (type) {
case SET_CURRENT_CONTACT:
// !!! MY PROBLEM IS ON THE NEXT LINE
return {...state, values: { ...payload }};
case CLEAR_CURRENT_CONTACT:
return {...state, values: getEmptyValues()};
default:
return state;
}
}
function getEmptyValues() {
return {
firstName: '',
lastName: '',
phone: ''
}
}
为了澄清这里发生的事情:当类型为 SET_CURRENT_CONTACT 的操作流入这个 reducer 时,我将表单值设置为用户选择的联系人的值。这部分工作正常。
但是,该表单现在被标记为 !pristine && 脏。结果,我的提交按钮没有被禁用,实际上应该在用户决定进行任何更改之前禁用。
所以我的问题是:如何更新表单状态以将其标记为原始状态?
(或我猜无效,但原始感觉是更好的选择)
我曾尝试简单地设置状态对象中的值,但这并没有做任何事情:
return {...state, values: { ...payload }, pristine: true };
如果我在这里使用了错误的方法,我也会很感激被指出正确的方向。