๐Ÿ“–[React] useRef()

ํ˜ฑยท2022๋…„ 10์›” 18์ผ

React

๋ชฉ๋ก ๋ณด๊ธฐ
26/28

word๋ฅผ ์ž…๋ ฅ๋ฐ›์„ component ํ˜•์„ฑ

CreateWord.js

export default function CreateWord() {
  return (
    <form>
      <div className="input_area">
        <label>Eng</label>
        <input type="text" placeholder="computer" />
      </div>
      <div className="input_area">
        <label>Kor</label>
        <input type="text" placeholder="์ปดํ“จํ„ฐ" />
      </div>
      <div className="input_area">
        <label>Day</label>
        <select>
          <option>1</option>
          <option>2</option>
        </select>
      </div>
      <button>์ €์žฅ</button>
    </form>
  );
}

์ž…๋ ฅ๋ฐ›๋Š” <form> ํƒœ๊ทธ ์ด์šฉ!

์ด๋•Œ, day๋Š” data์—์„œ ๋ถˆ๋Ÿฌ์˜ด

CreateWord.js

import useFetch from "../hooks/useFetch";

export default function CreateWord() {
  const days = useFetch("http://localhost:3001/days");
  return (
    <form>
      <div className="input_area">
        <label>Eng</label>
        <input type="text" placeholder="computer" />
      </div>
      <div className="input_area">
        <label>Kor</label>
        <input type="text" placeholder="์ปดํ“จํ„ฐ" />
      </div>
      <div className="input_area">
        <label>Day</label>
        <select>
          {days.map((day) => (
            <option key={day.id} value={day.day}>
              {day.day}
            </option>
          ))}
        </select>
      </div>
      <button>์ €์žฅ</button>
    </form>
  );
}

์•ž์„œ ๋งŒ๋“ค์–ด ๋‘์—ˆ๋˜ useFetch()๋ฅผ ํ™œ์šฉํ•˜์—ฌ, day์˜ data๋ฅผ ๋ถˆ๋Ÿฌ์˜ด
๊ฐ day๋“ค์„ ์„ ํƒํ•˜๋Š” ํ˜•ํƒœ๋กœ ๋‹ค์‹œ ๋‚˜์—ดํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ์ฆ‰ ํ˜•ํƒœ๋งŒ ๋ณ€ํ™˜! => mapํ•จ์ˆ˜ ์‚ฌ์šฉ

์ €์žฅ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด, ์ƒˆ๋กœ๊ณ ์นจ์„ ๋ง‰๋Š” ํ•จ์ˆ˜ ์ถ”๊ฐ€

import useFetch from "../hooks/useFetch";

export default function CreateWord() {
  const days = useFetch("http://localhost:3001/days");

  function onSubmit(e) {
  e.preventDefault();
}

  return (
    <form onSubmit={onSubmit}>
      <div className="input_area">
        <label>Eng</label>
        <input type="text" placeholder="computer" />
      </div>
      <div className="input_area">
        <label>Kor</label>
        <input type="text" placeholder="์ปดํ“จํ„ฐ" />
      </div>
      <div className="input_area">
        <label>Day</label>
        <select>
          {days.map((day) => (
            <option key={day.id} value={day.day}>
              {day.day}
            </option>
          ))}
        </select>
      </div>
      <button>์ €์žฅ</button>
    </form>
  );
}

event๊ฐ€ ์ƒ๊ฒจ๋„ ์ƒˆ๋กœ ๊ณ ์นจ์„ ํ•˜์ง€ ์•Š๋„๋ก, preventDefault()๋ฅผ ์‚ฌ์šฉ
formํƒœ๊ทธ๋กœ ๊ฐ์‹ธ์ ธ ์žˆ์–ด, ์ƒˆ๋กœ๊ณ ์นจ์ด ๋˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ form์— onSubmitํ•จ์ˆ˜ ์ถ”๊ฐ€
=> ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์„ ๋ง‰์•„ ์ฃผ๋Š” ๊ฒƒ

์ €์žฅ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ, ๋‹จ์–ด์™€ ๋œป์˜ ์ •๋ณด๋ฅผ ์ฐ๊ธฐ

input์ฐฝ์— ์ ํžŒ ๊ฐ’๋“ค์„ ์–ป๊ธฐ ์œ„ํ•ด์„œ useRef() ์‚ฌ์šฉ

useRef()๋Š” DOM์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ (์Šคํฌ๋กค ์œ„์น˜ ํ™•์ธ, ํฌ์ปค์Šค ์ค„ ๋•Œ ๋“ฑ ์‚ฌ์šฉ), DOM ์š”์†Œ๊ฐ€ ์ƒ์„ฑ๋œ ํ›„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ

import { useRef } from "react";
import useFetch from "../hooks/useFetch";

export default function CreateWord() {
  const days = useFetch("http://localhost:3001/days");
  
  function onSubmit(e) {
  e.preventDefault();
  
  console.log(engRef.current.value);
  console.log(korRef.current.value);
  console.log(dayRef.current.value);
}

const engRef = useRef(null);
const korRef = useRef(null);
const dayRef = useRef(null);
  return (
    <form onSubmit={onSubmit}>
      <div className="input_area">
        <label>Eng</label>
        <input type="text" placeholder="computer" ref={engRef} />
      </div>
      <div className="input_area">
        <label>Kor</label>
        <input type="text" placeholder="์ปดํ“จํ„ฐ" ref={korRef} />
      </div>
      <div className="input_area">
        <label>Day</label>
        <select ref={dayRef}>
          {days.map((day) => (
            <option key={day.id} value={day.day}>
              {day.day}
            </option>
          ))}
        </select>
      </div>
      <button>์ €์žฅ</button>
    </form>
  );
}

๊ฐ ์ž…๋ ฅ ๋ถ€๋ถ„์— ๋Œ€ํ•œ Ref() ์ƒ์„ฑ ํ›„ ์—ฐ๊ฒฐ
DOM ์š”์†Œ ์ƒ์„ฑ ์ดํ›„ ์ ‘๊ทผ ๊ฐ€๋Šฅ
์ €์žฅ ๋ฒ„ํŠผ -> ๋ Œ๋”๋ง ๊ฒฐ๊ณผ๊ฐ€ DOM์— ๋ฐ˜์˜๋œ ์ดํ›„๋ฅผ ๋ณด์—ฌ์คŒ
const engRef = useRef(null); ์ž…๋ ฅํ•˜๊ณ , ์ €์žฅ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ๊ทธ์— ๋Œ€ํ•œ ์ž…๋ ฅ ๊ฒฐ๊ณผ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ
current ์†์„ฑ = ํ•ด๋‹น ์š”์†Œ์— ์ ‘๊ทผ
value = input์— ์ž…๋ ฅ๋œ ๊ฐ’

profile
new blog: https://hae0-02ni.tistory.com/

0๊ฐœ์˜ ๋Œ“๊ธ€