пользовательский хук для упрощения управляемой формы react

#reactjs #react-hooks #react-forms

#reactjs #реагирующие хуки #react-формы

Вопрос:

я хотел бы упростить создание формы, избегая записи для каждого fied value={} и onChange={} используя пользовательский хук.

это мой код: https://codesandbox.io/s/busy-noether-pql8x?file=/src/App.js

проблема в том, что каждый раз, когда я нажимаю кнопку, состояние очищается, за исключением поля, которое я редактировал в данный момент

Ответ №1:

 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>
  );
}
 

Комментарии:

1. Привет, добро пожаловать ✌. Пожалуйста, добавьте больше объяснений и опишите проблемы с вопросом и как вы это исправляете. Спасибо