D+81
- React Hook -
(React Hook)
React Hook
๊ธฐ์กด์ ์ฐ๋ฆฌ๋ ๋ฆฌ์กํธ์์ ์ํ๋ฅผ ๊ด๋ฆฌํด์ฃผ๊ธฐ ์ํด์๋ function์ด ์๋ Class๋ฅผ ์ฌ์ฉํด ์ํ๋ฅผ ๊ด๋ฆฌํด ์๋ค.
Class๋ก ์ํ๋ฅผ ๊ด๋ฆฌํด์ค๋ฉด์ ๋๋์ ์ ์ด๊ธฐ์ํ๋ฅผ ์ค์ ํด์ฃผ๊ณ ํน์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ํด์ ์ํ๋ฅผ ๋ถ๋ฌ์ค๊ณ ๋ถ๋ฌ์จ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ณผ์ ์์ ๊ฝค๋ ๋ณต์กํ ๊ณผ์ ์ด๋ผ๋ ๊ฒ์ ๋๊ผ๋ค.
๋ฟ๋ง this์ ๋ํ ๊ฐ๋ ์ด ์ด๋์ ๋ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ bind๋ฅผ ์ฌ์ฉํด์ฃผ๊ณ ,
this๋ฅผ ์ ์ฌ์ฉํด์ผ๋ง ํฐ ์ค์ ์์ด ์ํ๋ฅผ ์ ๋๋ก ๊ด๋ฆฌํ ์ ์์๋ค.
์ด๋ฌํ ๊ฝค ๋ถํธํ ์ ์ ํด์ํ๊ธฐ ์ํด Hook์ด ๋ค์ด์ค๊ฒ ๋์๋๋ฐ
์ด๋ป๊ฒ Hook์ ์ฌ์ฉํ๋์ง์ ๋ํด์ ๊ฐ๋จํ๊ฒ ์์๋ณด๋ ค๊ณ ํ๋ค.
useState
import React, { useState } from 'react';
function Example() {
// ...
}
๋จผ์ ์ฐ๋ฆฌ๊ฐ ํ ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ useState๋ฅผ ์ค์ ํด ์ฃผ์ด์ผ ํ๋ค.
import React, { useState } from 'react';
function Example() {
// [state ๋ณ์ : count , state ๋ณ์๋ฅผ ๊ฐฑ์ ํ ์ ์๋ ํจ์ : setCount]
// ์ด๊ธฐ๊ฐ : 0
const [count, setCount] = useState(0);
useState๋ ์ฐ๋ฆฌ๊ฐ ํด๋์ค ํจ์์์ this.state๋ก ์ด๊ธฐ ๊ฐ์ ์ค์ ํด ์ฃผ์๋ฏ์ด
๋ง์ฐฌ๊ฐ์ง๋ก useState์์ ํน์ ๊ฐ์ ๋ฃ์ด ์ด๊ธฐ ๊ฐ์ ์ค์ ํด ์ค ์ ์๋ค.
์ด๋ Class์์ this.state๋ผ๋ ๊ฐ์ฒด ์์ ๋ณ์๋ฅผ ์ค์ ํด ์ฃผ์์ง๋ง
ํ ์ค๋ "[ ]"์์ "[๋ณ์, ๋ณ์๋ฅผ ๊ฐฑ์ ํ ์ ์๋ ํจ์]" ํํ๋ก ๊ฐ์ ๋ฃ์ด์ฃผ์ด์ผ ํ๋ค.
state ๊ฐ์ ธ์ค๊ธฐ
// Class Component
<p> You clicked {this.state.count} times </p>
// Funtion Component
<p> You clicked {count} times </p>
๊ธฐ์กด์ ์ฐ๋ฆฌ๊ฐ ํน์ ์ํ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด์๋ ํด๋์ค ์ปดํฌ๋ํธ์์ this.state๋ฅผ ์ด์ฉํด ๋ถ๋ฌ์ค๋ ๊ณผ์ ์ ๊ฑฐ์ณค์ง๋ง
ํจ์ ์ปดํฌ๋ํธ์ธ ํ ์ ์ฌ์ฉํ๊ฒ ๋ ๊ฒฝ์ฐ์๋ ์ฐ๋ฆฌ๊ฐ ์ด๊ธฐ์ ์ค์ ํ ์ํ๋ณ์๋ง ๊ฐ์ ธ์ค๋ฉด ๋๋ค.
state ๊ฐฑ์ ํ๊ธฐ
// Class Component
<button onClick={() => this.setState({ count: this.state.count + 1 })}>
Click me
</button>
// Funtion Component
<button onClick={() => setCount(count + 1)}>
Click me
</button>
์ํ์ ๊ฐ์ ๋ณ๊ฒฝํ๊ฑฐ๋ ๊ฐฑ์ ํ๊ธฐ ์ํด์๋ ํด๋์ค ์ปดํฌ๋ํธ์์ this.setState๋ผ๋ ๊ฒ์ ์ฌ์ฉํด ์ฃผ์์ง๋ง,
ํจ์ ์ปดํฌ๋ํธ์์๋ ์ํ๋ณ์๋ฅผ ์ง์ ํด ์ฃผ์์๋ ์ํ ๋ณ์๋ฅผ ๊ฐฑ์ ํ ์ ์๋ ํจ์๋ฅผ ์ค์ ํด ์ฃผ์์ผ๋ฏ๋ก
ํด๋น ํจ์์๋ค๊ฐ ์ํ๋ ๊ฐ์ ๋ฃ์ด ์ํ๋ฅผ ๋ณ๊ฒฝํด์ฃผ๊ฑฐ๋ ๊ฐฑ์ ํด ์ค ์ ์๋ค.
Effect Hook
import React, { useState, useEffect } from 'react';
function Example() {
const [count, setCount] = useState(0);
// componentDidMount, componentDidUpdate์ ๊ฐ์ ๋ฐฉ์์ผ๋ก
useEffect(() => {
// ๋ธ๋ผ์ฐ์ API๋ฅผ ์ด์ฉํ์ฌ ๋ฌธ์ ํ์ดํ์ ์
๋ฐ์ดํธํฉ๋๋ค.
document.title = `You clicked ${count} times`;
});
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
Effect Hook์ ์ฐ๋ฆฌ๊ฐ ํด๋์ค ์ปดํฌ๋ํธ์์ ๋ผ์ดํ ์ฌ์ดํด์ธ ์๋ช ์ฃผ๊ธฐ์์ ์ฌ์ฉ๋์๋ ๊ฒ๋ค ๋์ ์
useEffect๋ง์ผ๋ก ๊ตฌํํ ์ ์๋ ๊ฒ์ด๋ค.
(effect hook์ ์์ง ์ ๋๋ก ํ์ตํ์ง ๋ชปํด ๋ ๊ณต๋ถํด๋ด์ผ ํ ๊ฒ ๊ฐ๋ค.)
'์๋ > Code-States' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[D+83] React๋ฅผ ์ด์ฉํด ํฌ๋์ฑ(TO-DO) ๋ง๋ค์ด๋ณด๊ธฐ (1) (0) | 2021.01.09 |
---|---|
[D+82] immersive์ฝ์ค ๋๋ฒ์งธ ํ๊ฐ (0) | 2021.01.09 |
[D+80] ์๊ณ ๋ฆฌ์ฆ๋ฌธ์ 5๋ฒ (0) | 2021.01.06 |
[D+79] ์๊ณ ๋ฆฌ์ฆ๋ฌธ์ 3 - 4๋ฒ (0) | 2021.01.05 |
[D+78] React Lifecycle (0) | 2021.01.05 |
๋๊ธ