自定义钩子以简化反应控制形式

问题描述

我想简化表单创建,避免使用自定义钩子为每个字段 value={}onChange={} 编写代码

这是我的代码https://codesandbox.io/s/busy-noether-pql8x?file=/src/App.js

问题是,每次我按下按钮时,除了我当前编辑的字段外,状态都会被清除

解决方法

import React,{ useState } from "react";
import "./styles.css";

const useFormField = (initialValue) => {
  const [values,setValues] = React.useState(initialValue);
  const onChange = React.useCallback((e) => {
    const name = e.target.name;
    const value = e.target.value;
    setValues( (prevValues) =>  ({...prevValues,[name]:value}));
  },[]);
  return { values,onChange };
};

export default function App() {
 

  //hoot to simplify the code,const {values,onChange} = useFormField({
    Salary: "",Email: ""
  })

  const onCreateUser = () => {
    console.log(values);
  };

  return (
    <div className="App">
      <form>
        <label htmlFor="Email">Email: </label>
        <input name="Email" onChange={onChange}  />
        <label htmlFor="Email">Salary: </label>
        <input name="Salary" onChange={onChange}  />
        <button type="button" onClick={onCreateUser}>
          Send
        </button>
      </form>
    </div>
  );
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...