如何用React useReducer更新一个表单对象

162 阅读1分钟

我有一个包含地址对象的受控表单:

  const [formData, setFormData] = useReducer(formReducer, {
    name: "",
    address: { addressLine1: "", city: "", state: "", zip: "" },
    phone: "",
    contact: "",
  });
const formReducer = (state, event) => {
  return {
    ...state,
    [event.name]: event.value,
  };
};

更新一个表单输入会触发一个处理函数:

<input
  className={style.bodylessInput}
  placeholder=" "
  type="text"
  maxLength={30}
  name="name"
  value={formData.name}
  onChange={handleChange}
/>
function handleChange(event) {
  setFormData({
    name: event.target.name,
    value: event.target.value,
  });
}

我正在为更新地址字段而努力。使用带有name="addressLine1" 的输入将向表单对象添加一个属性,而不是更新地址。