๋ฒจ๋กํผํธ์ ํจ๊ปํ๋ ๋ชจ๋ ๋ฆฌ์กํธ
#
React ์ ๋ฌธInput
์ํ ๊ด๋ฆฌํ๊ธฐ#
์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์ ์๋ input ํ๊ทธ์ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ
input์ ๋ด์ฉ์ ์ ๋ ฅํ๋ฉด ์๋์ ๊ฐ์ด ์ ๋ฐ์ดํธ๋จ.
์ด๊ธฐํ๋ฅผ ํด๋ฆญํ๋ฉด input ๋ด๋ถ์ ๋ด์ฉ๋ ์ง์์ง๊ณ , ์๋์ ๊ฐ๋ ์ง์์ง.
InputSample.js
import React, {useState} from 'react';
function InputSample() { const [text, setText] = useState('');
const onChange = (e) => { setText(e.target.value); };
const onReset = () => { setText(''); };
return ( <div> <input onChange={onChange} value={text} /> <button onClick={onReset}>์ด๊ธฐํ</button> <div> <b>๊ฐ: {text}</b> </div> </div> );}
export default InputSample;
App.js
import React from 'react';import InputSample from './InputSample';
function App() { return <InputSample />;}
export default App;
input
์ onChange
์ด๋ฒคํธ๋ฅผ ์ฌ์ฉ. ์ด๋ฒคํธ ๊ฐ์ฒด e
๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์์์ ์ฌ์ฉ . e.target
์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ DOM์ธ input DOM์ ๊ฐ๋ฆฌํค๊ฒ ๋๊ณ , DOM์ value
๊ฐ, e.target.value
๋ฅผ ์กฐํํ๋ฉด ํ์ฌ input
์ ์
๋ ฅํ ๊ฐ์ด ๋ฌด์์ธ์ง ์ ์ ์๋ค .
input
์ํ ๊ด๋ฆฌํ๊ธฐ#
์ฌ๋ฌ ๊ฐ์ input
์ ๊ฐ์๊ฐ ์ฌ๋ฌ ๊ฐ๊ฐ ๋์์ ๋ ๋จ์ํ useState
๋ฅผ ์ฌ๋ฌ๋ฒ ์ฌ์ฉํ๊ณ onChange
๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ง๋ค์ด์ ๊ตฌํํ ์๋ ์์ง๋ง, ๋ ์ข์ ๋ฐฉ๋ฒ์ input
์ name
์ ์ค์ ํ๊ณ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ์ด ๊ฐ์ ์ฐธ์กฐํ๋ ๊ฒ์ด๋ค. ์ด์ useState
์์๋ ๋ฌธ์์ด์ด ์๋๋ผ ๊ฐ์ฒด ํํ์ ์ํ๋ฅผ ๊ด๋ฆฌํด์ฃผ์ด์ผ ํ๋ค.
InputSample.js
import React, {useState} from 'react';
function InputSample() { const [inputs, setInputs] = useState({ name: '', nickname: '', });
const {name, nickname} = inputs; // ๋น๊ตฌ์กฐํ ํ ๋น์ ํตํด ๊ฐ ์ถ์ถ
const onChange = (e) => { const {value, name} = e.target; // ์ฐ์ e.target ์์ name ๊ณผ value ๋ฅผ ์ถ์ถ setInputs({ ...inputs, // ๊ธฐ์กด์ input ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ ๋ค [name]: value, // name ํค๋ฅผ ๊ฐ์ง ๊ฐ์ value ๋ก ์ค์ }); };
const onReset = () => { setInputs({ name: '', nickname: '', }); };
return ( <div> <input name="name" placeholder="์ด๋ฆ" onChange={onChange} value={name} /> <input name="nickname" placeholder="๋๋ค์" onChange={onChange} value={nickname} /> <button onClick={onReset}>์ด๊ธฐํ</button> <div> <b>๊ฐ: </b> {name} ({nickname}) </div> </div> );}
export default InputSample;
const onChange = (e) => { const {value, name} = e.target; // ์ฐ์ e.target ์์ name ๊ณผ value ๋ฅผ ์ถ์ถ setInputs({ ...inputs, // ๊ธฐ์กด์ input ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ ๋ค [name]: value, // name ํค๋ฅผ ๊ฐ์ง ๊ฐ์ value ๋ก ์ค์ });};
์ด ๋ถ๋ถ์ ํ์ด ์ฐ๋ฉด
const nextInputs = { ...inputs,};
nextInputs[name] = value;
setInputs(value);
useRef
๋ก ํน์ DOM ์ ํํ๊ธฐ#
JavaScript๋ฅผ ์ฌ์ฉํ ๋๋ ํน์ DOM์ ์ ํํ๊ธฐ ์ํด getElementById
, querySelector
๊ฐ์ DOM Selector ํจ์๋ฅผ ์ฌ์ฉํด์ DOM์ ์ ํํ๋ค.
๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํ๋ ํ๋ก์ ํธ์์๋ ๊ฐ๋ DOM์ ์ง์ ์ ํํด์ผ ํ๋ ์ํฉ์ด ๋ฐ์ํ ์์๋๋ฐ ๊ทธ๋ด ๋ ref
๋ผ๋ ๊ฒ์ ์ฌ์ฉํ๋ค. ํจ์ํ ์ปดํฌ๋ํธ์์ ref
๋ฅผ ์ฌ์ฉํ ๋๋ useRef
๋ผ๋ Hook ํจ์๋ฅผ ์ฌ์ฉํ๋ค. ํด๋์คํ ์ปดํฌ๋ํธ์์๋ ์ฝ๋ฐฑ ํจ์๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ React.createRef
๋ผ๋ ํจ์๋ฅผ ์ฌ์ฉํ๋๋ฐ, ํด๋์ค ์ปดํฌ๋ํธ๋ ํ์ฌ ๋ณ๋ก ์ค์ํ์ง ์๋ค.
InputSample.js
์์ ์ด๊ธฐํ ๋ฒํผ์ ํด๋ฆญํ์ ๋ ์ด๋ฆ input
์ ํฌ์ปค์ค๊ฐ ์กํ๋๋ก ๊ตฌํํด๋ณธ๋ค.
InputSample.js
import React, {useState, useRef} from 'react';
function InputSample() { const [inputs, setInputs] = useState({ name: '', nickname: '', }); const nameInput = useRef();
const {name, nickname} = inputs; // ๋น๊ตฌ์กฐํ ํ ๋น์ ํตํด ๊ฐ ์ถ์ถ
const onChange = (e) => { const {value, name} = e.target; // ์ฐ์ e.target ์์ name ๊ณผ value ๋ฅผ ์ถ์ถ setInputs({ ...inputs, // ๊ธฐ์กด์ input ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ ๋ค [name]: value, // name ํค๋ฅผ ๊ฐ์ง ๊ฐ์ value ๋ก ์ค์ }); };
const onReset = () => { setInputs({ name: '', nickname: '', }); nameInput.current.focus(); };
return ( <div> <input name="name" placeholder="์ด๋ฆ" onChange={onChange} value={name} ref={nameInput} /> <input name="nickname" placeholder="๋๋ค์" onChange={onChange} value={nickname} /> <button onClick={onReset}>์ด๊ธฐํ</button> <div> <b>๊ฐ: </b> {name} ({nickname}) </div> </div> );}
export default InputSample;
#
React ๊ณต๋ถ๋ฅผ ํ๋ฉฐ ๋๋์ JS ๊ธฐ์ด ๋ฌธ๋ฒ๋ง ๋ผ๊ณ ๋ฐ๋ก React ์ ๋ฌธ์ผ๋ก ๋์ด์ค๋ DOM, Event ๊ฐ์ฒด ๋ฑ JS์์ ๋ถ์กฑํ๋ ๊ฐ๋ ์ด ๋ฑ์ฅํ ๋๋ง๋ค ๋ฏ์ React ๊ตฌ์กฐ์ ํจ๊ป ๋จธ๋ฆฌ ์์ ๋ณต์กํ๊ฒ ๋ง๋ค์๋ค .
์์ง React์ JavaScript์ ๊ด๊ณ๊ฐ ์ ํํ๊ฒ ์ด๋ค ๊ฒ์ธ์ง ๋ชจ๋ฅด๊ฒ ๋ค. ๊ฐ์๋ฅผ ๋ณด๋ฉด JavaScript๋ฅผ ์ฌ์ฉํ ๋์ React๋ฅผ ์ฌ์ฉํ ๋๋ฅผ ๊ตฌ๋ถํ๋ฉด์ ์ฌ์ฉํ๋ ๋ถ๋ถ๋ค์ด ์๋ค . React๋ ๊ฒฐ๊ตญ JS๋๊น JS๋ก๋ง ํด๋ ๋ค ๋๋ ๊ฑธ๋ก ์๊ฐํ๋๋ฐ ์ ๊ตฌ๋ถํ๋ ๊ฑด์ง ์ดํด๋์ง ์๋๋ค.
์ข์ React ๊ณต๋ถ ์๋ฃ๋ฅผ ์ฐพ๊ธฐ ์ด๋ ต๋ค. ์ต์ ๊ธฐ์ ์ด๋ผ ๋น ๋ฅด๊ฒ ๋ณํ๊ณ ์์ด์ ์ฑ ๋ณด๋ค๋ ์ธํฐ๋ท ์๋ฃ + ์จ๋ผ์ธ ๊ฐ์๋ก ๊ณต๋ถํด์ผ ํ๋ค.
์ํ์ฝ๋ฉ - 4์๊ฐ 40๋ถ ๋ถ๋
velopert ๋ ๊ฐ์ข - 2์๊ฐ 53๋ถ ๋ถ๋
zeroCho ๋ ๊ฐ์ข - 12์๊ฐ 44๋ถ ๋ถ๋
Udemy ๊ฐ์ข - 26์๊ฐ 42 ๋ถ ๋ถ๋
#
์์ผ๋ก ..zeroCho๋์ JavaScript ์น๊ฒ์ ๊ฐ์ข์ React ์น๊ฒ์ ๊ฐ์ข๊ฐ ์น์ ํ๊ฒ ์ค๋ช ํ๋ฉด์๋์๊ฐํ๊ฒ ๋ง๋๋ ์์ ๋ค์ ์ฌ์ฉํด์ ๋์์ด ๋๋ ๊ฒ ๊ฐ๋ค. ์ด ๋ ๊ฐ์ข๋ฅผ ๋ฃ๊ณ ๊ธฐ์ด๋ฅผ ์๋๋ค.
์ธํฐํ์ด์ค๋์์ธ ์์ ๋ ๋ง๋ ๋ฏธ๋์ดํ๊ณผ ์๊ฐ๊ณํ ํ์ด์ง๋ฅผ ๋ง๋ค์ด๋ณธ๋ค. ์ปดํฌ๋ํธ ๊ธฐ๋ฐ์ธ React๋ฅผ ํ์ฉํ๊ธฐ ์ข์ ์์ ์ธ ๊ฒ ๊ฐ๋ค.