코드로 설명하도록 하겠습니다.

userState 에서 사용자 입력값 처리하기.

Untitled

위와같이 처리하면 된다.

단, 중복된 부분(초록색 선)이 존재하게된다.

하나의 useState로 처리가 가능하다.

import { useState } from "react";

const DiaryEditor = () => {
  ***const [state, setState] = useState({
    author: "",
    content: "",
  });***

  return (
    <div className="DiaryEditor">
      <h2>오늘의 일기</h2>
      <div>
        <input
          value={**state.author**}
          onChange={(e) => {
            ***setState({
              author: e.target.value,
              content: state.content,
            });***
            console.log("input:", e.target.value);
          }}
        />
      </div>

      <div>
        <textarea
          value={**state.content**}
          onChange={(e) => {
            ***setState({
              author: state.author,
              content: e.target.value,
            });***
            console.log("textArea:", e.target.value);
          }}
        ></textarea>
      </div>
    </div>
  );
};

export default DiaryEditor;

만약 useState 내에 객체가 여러개라면?

state.xxxx 로 자신의 값을 여러개 써주어야한다.

그렇기 하지 않으려면 스프레드를 이용하면 된다.(순서가 중요하다.)

import { useState } from "react";

const DiaryEditor = () => {
  const [state, setState] = useState({
    author: "",
    content: "",
  });

  return (
    <div className="DiaryEditor">
      <h2>오늘의 일기</h2>
      <div>
        <input
          value={state.author}
          onChange={(e) => {
            setState({
              ***...state, // 순서가 중요 아래에 쓰면 안된다.***
              author: e.target.value,
            });
            console.log("input:", e.target.value);
          }}
        />
      </div>

      <div>
        <textarea
          value={state.content}
          onChange={(e) => {
            setState({
              ***...state, // 순서가 중요 아래에 쓰면 안된다.***
              content: e.target.value,
            });
            console.log("textArea:", e.target.value);
          }}
        ></textarea>
      </div>
    </div>
  );
};

export default DiaryEditor;

더 간단히 구현하면?

import { useState } from "react";

const DiaryEditor = () => {
  const [state, setState] = useState({
    author: "",
    content: "",
  });

  ***const handleChangeState = (e) => {
    console.log(e.target.name);
    console.log(e.target.value);

    setState({
      ...state,
      [e.target.name]: e.target.value,
    });
  };***

  return (
    <div className="DiaryEditor">
      <h2>오늘의 일기</h2>
      <div>
        <input
          name="author"
          value={state.author}
          ***onChange={handleChangeState}***
        />
      </div>

      <div>
        <textarea
          name="content"
          value={state.content}
          ***onChange={handleChangeState}***
        ></textarea>
      </div>
    </div>
  );
};

export default DiaryEditor;

마지막으로 다른것도 추가해본다.

import { useState } from "react";

const DiaryEditor = () => {
  const [state, setState] = useState({
    author: "",
    content: "",
    point: 4,
  });

  const handleChangeState = (e) => {
    console.log(e.target.name);
    console.log(e.target.value);

    setState({
      ...state,
      [e.target.name]: e.target.value,
    });
  };

  return (
    <div className="DiaryEditor">
      <h2>오늘의 일기</h2>
      <div>
        <input
          name="author"
          value={state.author}
          onChange={handleChangeState}
        />
      </div>

      <div>
        <textarea
          name="content"
          value={state.content}
          onChange={handleChangeState}
        ></textarea>
      </div>

      <div>
        <select name="point" value={state.point} onChange={handleChangeState}>
          <option value={1}>1</option>
          <option value={2}>2</option>
          <option value={3}>3</option>
          <option value={4}>4</option>
          <option value={5}>5</option>
        </select>
      </div>
    </div>
  );
};

export default DiaryEditor;