- ์ปดํฌ๋ํธ ๊ฐ์ ์ด๋๋๋
props
์ ๋ฌ๋ฆฌ ์ปดํฌ๋ํธ ๋ด๋ถ์์ ๊ด๋ฆฌ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด - ์ดํ๋ฆฌ์ผ์ด์ ์ ํ๋ฉด ๋ ๋๋ง์ ์ํฅ์ ๋ผ์น๋ค
- ์ฌ์ฉ์์ ์ธํฐ๋์ ์ ํตํด ๋์ ์ผ๋ก ๋ณํ๋ ๋ฐ์ดํฐ
- ์๋ก ๋ค๋ฅธ ์ปดํฌ๋ํธ์์ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋!
- ์๋ก ๋ค๋ฅธ ์ปดํฌ๋ํธ์์ ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋, ํด๋น ๋ฐ์ดํฐ์ ์ถ์ฒ๊ฐ ๋์ผํด์ผ ํ๋ค. ๊ทธ๋์ผ ์๋ก์ ๋ณํ์ ๋์ ์ผ๋ก ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ฆ ์ํ์ ์ผ๊ด์ฑ (=โ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑโ)์ ์ ์ง์ผ์ผํ๋ค.
- โSingle Source of Truthโ์ด๋ผ๋ ๋ฐฉ๋ฒ๋ก ์ด ์ด๋ฌํ ์ํ์ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํด ๋ฑ์ฅํ ๋ฐฉ๋ฒ๋ก ์ธ๋ฐ, ๋ง๊ทธ๋๋ก ์ ๋ขฐํ ์ ์๋ ๋จ์ผ ์ถ์ฒ๋ฅผ ๋งํ๋ค. ์ด ๋ฐฉ๋ฒ๋ก ์ด React๊ฐ ํํ ๋ฐฉ๋ฒ๋ก ์ผ๋ก, ๊ฒฐ๊ตญ React์์ ์ํ๊ด๋ฆฌ๊ฐ ํ์ํ ์ด์ ๋ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ์ ์ํด์, ์๋ก ๋ค๋ฅธ ์ปดํฌ๋ํธ์ ๋ถํฌ๋์ด์๋ ํ๋์ ๋ฐ์ดํฐ๊ฐ ์๋ก ์ผ์นํ ์ ์๋๋ก ๊ด๋ฆฌํด์ฃผ๊ธฐ ์ํจ์ด๋ค.
- ์ง์ญ ์ํ : ์ปดํฌ๋ํธ ๋ด๋ถ์์๋ง ๊ด๋ฆฌ๋๋ ์ํ
- ex) Input์ ํตํด ์ฌ์ฉ์ ์ ๋ ฅ์ ๋ฐ์ ์ํ๋ฅผ ์ ๋ฐ์ดํธํ๋ ๊ฒฝ์ฐ
- ์ปดํฌ๋ํธ ๊ฐ ์ํ : ์ฌ๋ฌ ์ปดํฌ๋ํธ๋ฅผ ๋๋๋ค๋ฉฐ ๊ด๋ฆฌ๋๋ ์ํ
- ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋ก prop๋ฅผ ํตํด ์ ๋ฌํ๋ค โ ์ฐ์๋ ๊ฒฝ์ฐ โProp Drillingโ
- ex) Modal์ฐฝ
- ์ ์ญ ์ํ : ํ๋ก์ ํธ ์ ์ฒด์ ์ํฅ์ ๋ผ์น๋ ์ํ
- props๋ฅผ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ก ์ ๋ฌํ๊ธฐ ์ํด์ ์ฌ๋ฌ๊ฐ์ง ์ปดํฌ๋ํธ๋ฅผ ๊ฑฐ์น๋ ๋ฐฉ์์ ๋งํ๋ค.
- ๋ถ๋ชจ ์ปดํฌ๋ํธ โ ์ค๊ฐ ์ปดํฌ๋ํธ1 โ ์ค๊ฐ ์ปดํฌ๋ํธ 2โ โฆ โ ์ต์ข ์ปดํฌ๋ํธ
- ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์ต์ข ์ปดํฌ๋ํธ๋ก props๋ฅผ ์ ๋ฌํ๊ธฐ ์ํด ์ค๊ฐ ์ปดํฌ๋ํธ๋ค์ ๊ฑฐ์น๋ค.
- ์ด depth๊ฐ ๊น์ด์ง ์๋ก ์ํ๋ฅผ ์ถ์ ํ๊ธฐ ์ด๋ ค์์ง๊ธฐ ๋๋ฌธ์ ๋ฌด์กฐ๊ฑด Prop Drilling์ผ๋ก props๋ค์ ๋ถํ์ํ ์ปดํฌ๋ํธ๋ค์ ๊ฑฐ์น๋๋ก ํ์ง ์๊ณ ๋ณ๋์ ์ํ๊ด๋ฆฌ๊ฐ ๊ผญ ํ์ํ๋ค.
- ๋ฆฌ์กํธ์ ์ปดํฌ๋ํธ ํธ๋ฆฌ ๋ด์์ ์ ์ญ ์ํ๋ฅผ ๊ณต์ ํ ์ ์๋ ๋ฐฉ๋ฒ
- ์ค๊ฐ ์ปดํฌ๋ํธ์๊ฒ props๋ฅผ ๋๊ธฐ์ง ์๊ณ ๋ ์ต์ข ์ปดํฌ๋ํธ์๊ฒ ์ํ๋ฅผ ์ ๋ฌํ ์ ์๋ค (prop drilling ๋ฐฉ์ง)
- ๊ตฌ์ฑ์์
- Context : ์ ์ญ ์ํ ์ ์ฅ์.
- Context์ Provider์ Consumer๊ฐ ์ ์ฅ๋์ด์์
- Consumer์๋ Context๋ฅผ ํตํด ์ ๊ทผ ๊ฐ๋ฅ
- Provider : ์ ์ญ ์ํ ์ ๊ณต์.
- ์ ์ฅ์์ธ Context์ ์ํ๋ฅผ ์ ๊ณตํด์ฃผ๋ ์ญํ ์ ํจ
- ์ํ๋ฅผ ์ ๊ณต๋ฐ๊ณ ์ ํ๋ ์ปดํฌ๋ํธ๋ Provider ํ์์ ์์ด์ผํจ
- ๋ฐ๋ผ์ ์ ์ญ ์ํ๋ก ์ธ ๊ฒฝ์ฐ, Provider๋ App.jsx๊ฐ์ ๋ฃจํธ ์ปดํฌ๋ํธ๊ฐ ๋๋ค.
- Consumer : ์ ์ญ ์ํ ์ฌ์ฉ์
- Context : ์ ์ญ ์ํ ์ ์ฅ์.
- ๋จ์ :
- ๋ฒ์๋ฅผ ์ ์ ์ํด์ฃผ์ง ์์ผ๋ฉด ๋ถํ์ํ ๋ ๋๋ง์ ์ผ์ผํจ๋ค
-
์ค์ ์ง์ค์ Storage์ ์ํ ์ ๋ฐ์ดํธ๋ฅผ ์ํ Reducer๋ฅผ ์ฌ์ฉํจ
-
๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ์ ๋ฐ๋ฅธ๋ค.
-
์ฅ์ :
- ์ค๋๋ ๋งํผ ํํํ ์ปค๋ฎค๋ํฐ์ ๊ฐ๋ฐ์ ํ ์กด์ฌ
- ๊ฐ๋ฐ์ ์ฒ์ ์์ํ ๋ ์ฐธ๊ณ ํ ์ ์๋ ๋ณด์ผ๋ฌํ๋ ์ดํธ๊ฐ ๊ต์ฅํ ๋ค์ํ ๋ฟ๋ง ์๋๋ผ, ๊ฐ๋ฐ ์ค์ ์์ด์๋ ๋ฒ๊ทธ๊ฐ ์๊ธธ ๊ฒฝ์ฐ ํด๊ฒฐํ๊ธฐ๊ฐ ์ฌ์
- ๋ฏธ๋ค์จ์ด๋ฅผ ํ์ฉํ์ฌ ์ฌ๋ฌ ๋น๋๊ธฐ, ๋ก๊ทธ ์์ ๋ฑ์ ์ฒ๋ฆฌํ ์ ์๋๋ฐ ์ด ๋ Redux๋ฅผ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ ์ฝ๊ฒ ๊ตฌํ ๊ฐ๋ฅ
- ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ํ๋ฆ์ ๋ฐ๋ผ์ Reducer ๋ฑ์ ๋จ์ ํ ์คํธ๊ฐ ๋น๊ต์ ์ฌ์
-
๋จ์ :
๋๋ถ๋ถ ๊ตฌ์กฐ๊ฐ ๋๋ฌด ๋ณต์กํด์ ๋ฌธ์ ๊ฐ ์๊น
- ๊ฐ๋จํ ์น์ฑ์ ๋ง๋ค ๋์๋ Action, Reducer, Action Creator ๋ฑ์ ์ฝ๋๋ฅผ ๋ชจ๋ ์์ฑํด์ผ ํจ.
- Recoil, MobX์๋ ๋ฌ๋ฆฌ State๊ฐ ๋ณ๊ฒฝ ๋ ๋ Component๋ฅผ ์ ๋ฐ์ดํธ ํด์ฃผ๋ ๋ฐ์ํ ๋ฉ์ปค๋์ฆ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฌ๋์ง ์์์ React์ ์์ฒด ๋ฉ์ปคํฐ์ฆ์ ํ์ฉํ๊ฑฐ๋ ์ถ๊ฐ์ ์ธ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ผ ํจ
- ๋น๊ต์ ์ต๊ทผ์ ๋์จ ์๋ก์ด ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- Facebook์ฌ์์ ๊ฐ๋ฐ
- ๊ฐ์ฅ React์ค๋ฌ์ด ์ํ๊ด๋ฆฌ๋ผ๋ ์ฒ ํ์ ๊ฐ๊ณ ์์
- ์ฅ์ :
- Redux, MobX์ ๋นํด ๋ ๊ฐ๋จํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ธ์ ์ด์ฌ์๊ฐ ์์ํ๊ธฐ์ ์ ๋นํ๋ฉฐ, ์์ ํ๋ก์ ํธ๋ฅผ ์์ํ๋ ๋ฐ ๊ณผ๋ํ ๋ณด์ผ๋ฌ ํ๋ ์ดํธ๊ฐ ํ์ํ์ง ์์
- component๊ฐ ๋ ๋๋ง ๋๋ ์๊ธฐ, ์ํ ๋ฑ์ ์ธ๋ฐํ๊ฒ ์ ์ด ๊ฐ๋ฅ (์ฑ๋ฅ ์ต์ ํ ๋ฑ์๋ ํ์ฉ ๊ฐ๋ฅ)
- Redux์๋ ๋ฌ๋ฆฌ Reactive ๋ฉ์ปค๋์ฆ์ ํ์ฌํ๊ณ ์๊ธฐ์, ๋์ ์ธ ๊ธฐ๋ฅ์ ์กฐ๊ธ ๋ ์ฝ๊ฒ ๊ตฌํ ๊ฐ๋ฅ
- ๋จ์ :
- ์ต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค ๋ณด๋, ์ฌ์ฉ์ ์ปค๋ฎค๋ํฐ๊ฐ ๋น๊ต์ ๋น์ฝํจ โ ์ด์๊ฐ ์๊ฒผ์ ๋, ํ๋ก ํด๊ฒฐํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธธ ์๋.
- Recoil์ ์ํ๊ด๋ฆฌ ์์ฒด๊ฐ ๊ต์ฅํ ์ธ๋ถํ ๋์ด ์๊ธฐ์ ์ด์ฌ์๊ฐ ์์ํ๊ธฐ์ ์ฝ๋๋ผ๋, ๋๋ฒ๊น ํ๊ฑฐ๋ ํ ์คํธ๋ฅผ ์งํํ๊ธฐ์ ์ด๋ ค์ธ ์๋ ์์ต๋๋ค.
- Redux์ ์ฌ๋ฌ ์ ์ ๋ณด์ํ์ฌ ๋์จ ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- Redux๋ณด๋ค ์กฐ๊ธ ๋ ๊ฐ์ฒด ์งํฅ์ ์ด๋ฉฐ, Immutable.js ์ ๊ฐ์ ๋ถ๋ณ์ฑ์ ์ ์งํ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ตณ์ด ์ฌ์ฉํ ํ์๊ฐ ์๋ค๋ ํน์ง
- ์ฅ์ :
- Redux์ ๋นํด ์ ์ฒด์ ์ผ๋ก ์กฐ๊ธ ๋ ์ฌ์ด ๋ฌ๋์ปค๋ธ๋ฅผ ๊ฐ์ง
- ๊ฐ์ฒด ์งํฅ์ ์ด๊ณ ์บก์ํ๋ฅผ ์ง์ํ๊ธฐ์ ๊ฐ๋ฐ์ ์นํ์ ์ธ ํธ
- Redux์์ ์ ๊ณตํ์ง ์๋ ๋ฐ์ํ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ๊ธฐ์ ์กฐ๊ธ ๋ ์ฝ๊ฒ ๋์ ์น์ฑ ์ ์ ๊ฐ๋ฅ
- ๋จ์ :
- ์น์ฑ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด์ ๋ก์ง์ด MobX์ ์๋ ์ ๋ฐ์ดํธ์ ์์กดํ๊ธฐ์ ๋๋ฒ๊น ์ด ์กฐ๊ธ ๋ ์ด๋ ค์์ง ์ ์์
- Redux ๋งํผ ์ปค๋ฎค๋ํฐ๊ฐ ํฌ์ง ์์
- Validation ๊ตฌํ์ ์์ด ์ฝ๋๊ฐ ์กฐ๊ธ ๋ฒ์ก์ค๋ฝ๋ค๊ณ ์๋ ค์ ธ ์์
- useMemo๋ ์ข ์ ๋ณ์๋ค์ด ๋ณํ์ง ์์ผ๋ฉด ํจ์๋ฅผ ๊ตณ์ด ๋ค์ ํธ์ถํ์ง ์๊ณ ์ด์ ์ ๋ฐํํ ์ฐธ์กฐ๊ฐ์ ์ฌ์ฌ์ฉ ํ๋ค.
- ์ฆ, ํจ์ ํธ์ถ ์๊ฐ๋ ์ธ์ด๋ธํ ์ ์๊ณ ๊ฐ์ ๊ฐ์ props๋ก ๋ฐ๋ ํ์ ์ปดํฌ๋ํธ์ ๋ฆฌ๋ ๋๋ง๋ ๋ฐฉ์งํ ์ ์๋ค.
- React hook์ด ์๋๋ผ์ ํด๋์คํ ์ปดํฌ๋ํธ์์๋ ์ฌ์ฉํ ์ ์๋ค.
- React.memo๋ฅผ ํตํด ์ปดํฌ๋ํธ์ props๊ฐ ๋ฐ๋์ง ์์๋ค๋ฉด, ๋ฆฌ๋ ๋๋งํ์ง ์๋๋ก ์ค์ ํ์ฌ ํจ์ํ ์ปดํฌ๋ํธ์ ๋ฆฌ๋ ๋๋ง ์ฑ๋ฅ์ ์ต์ ํ ํด์ค ์ ์๋ค.
- ์ฝ๋ฐฑํจ์๋ฅผ ์ด์ฉํด ๋ฉ๋ชจ์ด์ ์ด์ ์ ์ ์ฉํ ์ง ์ฌ๋ถ๋ฅผ ํ๋จํ ์๋ ์๋ค
- useMemo๊ฐ ๋ฆฌํด๋๋ ๊ฐ์ memoize ์์ผ์ฃผ์๋๋ฐ, useMemo์ ๋น์ทํ useCallback์ย ํจ์ ์ ์ธ์ memoize ํ๋๋ฐ ์ฌ์ฉ๋๋ค
- useCallback์ผ๋ก ํจ์๋ฅผ ์ ์ธํด์ฃผ๋ฉด, ์ข ์ ๋ณ์๋ค์ด ๋ณํ์ง ์๋ ์ด์ ๊ตณ์ด ํจ์๋ฅผ ์ฌ์์ฑํ์ง ์๊ณ ์ด์ ์ ์๋ ์ฐธ์กฐ ๋ณ์๋ฅผ ๊ทธ๋๋ก ํ์ ์ปดํฌ๋ํธ์ props๋ก ์ ๋ฌํ์ฌ, ํ์ ์ปดํฌ๋ํธ๋ props๊ฐ ๋ณ๊ฒฝ๋์ง ์์๋ค๊ณ ์ธ์งํ๊ฒ ๋์ด ํ์ ์ปดํฌ๋ํธ์ ๋ฆฌ๋ ๋๋ง์ ๋ฐฉ์งํ ์ ์๋ค.
- props์ ๊ฐ์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋๊ฒจ์ฃผ๋ ๊ฒฝ์ฐ ์๋ก ์์ฑ๋ ๊ฐ์ฒด๊ฐ props๋ก ๋ค์ด๊ฐ๋ฏ๋ก ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ๋ ๋๋ง ๋ ๋๋ง๋ค ์๋ก์ด ๊ฐ์ฒด๊ฐ ์์ฑ๋์ด ์์ ์ปดํฌ๋ํธ๋ก ์ ๋ฌ๋๋ค.
- props๋ก ์ ๋ฌํ ๊ฐ์ฒด๊ฐ ๋์ผํ ๊ฐ์ด์ด๋ ์๋ก ์์ฑ๋ ๊ฐ์ฒด๋ ์ด์ ๊ฐ์ฒด์ ๋ค๋ฅธ ์ฐธ์กฐ ์ฃผ์๋ฅผ ๊ฐ์ง ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ ์์ ์ปดํฌ๋ํธ๋ ๋ฉ๋ชจ์ด์ ์ด์ ์ด ๋์ง์๋๋ค.
- ์์ฑ์ ํจ์๋ ๊ฐ์ฒด ๋ฆฌํฐ๋ด๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ํ์ ์ปดํฌ๋ํธ๋ก ๋๊ฒจ์ฃผ๋ ๋ฐฉ์์ด ์๋, state๋ฅผ ๊ทธ๋๋ก ํ์์ปดํฌ๋ํธ์ ๋๊ฒจ์ฃผ์ด ํ์ํ ๋ฐ์ดํฐ ๊ฐ๊ณต์ ๊ทธ ํ์์ปดํฌ๋ํธ์์ ํด์ฃผ๋ ๊ฒ์ด ์ข๋ค.
- ๋ฆฌ์กํธ์์ ๋งคํ์ ํ ๋ ๋ฐ๋์ ๊ณ ์ key๋ฅผ ๋ถ์ฌํ๋๋ก ๊ฐ์ ํ๊ณ ์๋๋ฐ, ๋ฐฐ์ด์ index๊ฐ์ผ๋ก key๊ฐ์ ๋ถ์ฌํ๋ฉด ์ข์ง ์๋ค.
- ์๋ํ๋ฉด, ์ด๋ค ๋ฐฐ์ด์ ์ค๊ฐ์ ์ด๋ค ์์๊ฐ ์ฝ์ ๋ ๋ ๊ทธ ์ค๊ฐ ์ดํ์ ์์นํ ์์๋ค์ ์ ๋ถ index๊ฐ ๋ณ๊ฒฝ๋๋ค.
- ์ด๋ก ์ธํด key๊ฐ์ด ๋ณ๊ฒฝ๋์ด React๋ key๊ฐ ๋์ผ ํ ๊ฒฝ์ฐ, ๋์ผํ DOM Element๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ๋๋ฌธ์ ์์์น ๋ชปํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ๋ํ, ๋ฐ์ดํฐ๊ฐ key์ ๋งค์น๊ฐ ์๋์ด ์๋ก ๊ผฌ์ด๋ ๋ถ์์ฉ๋ ๋ฐ์ํ๋ค.
- setState๋ฅผ ์ฌ์ฉํ ๋ ์๋ก์ด ์ํ๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฃ๋ ๋์ , ์ํ ์ ๋ฐ์ดํธ๋ฅผ ์ด๋ป๊ฒ ํ ์ง ์ ์ํด ์ฃผ๋ ์ ๋ฐ์ดํธ ํจ์๋ฅผ ๋ฃ์ ์๋ ์๋๋ฐ,
์ด๋ ๊ฒ ํ๋ฉด useCallback์ ์ฌ์ฉํ ๋ ๋ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ก ๋ฃ๋ ๋ฐฐ์ด์ ๊ฐ์ ๋ฃ์ด์ฃผ์ง ์์๋ ๋๋ค.
// ์์) ์ญ์ ํจ์
const onRemove = useCallback(
id => {
setTodos(todos.filter(todo => todo.id !== id));
},
[todos],
);
// ์์) ํจ์ํ ์
๋ฐ์ดํธ ํ
const onRemove = useCallback(id => {
setTodos(todos => todos.filter(todo => todo.id !== id));
}, []);
- ๋ณดํต input ํ๊ทธ์ onChange ์ด๋ฒคํธ๋ฅผ ์ค๋ ํ์ดํ์ ํ ๋๋ง๋ค ํด๋น ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง ๋์ด, ์ต์ ํ ๋ฐฉ๋ฒ์ ๋ง์ด ์ฐพ๊ณคํ๋ค.
- lodash ๋ผ๊ณ ์ต์ ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐ๊ธฐ๋ ํ๋๋ฐ, ์๋ ์ฝ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐ์ง ์๊ณ ์ต์ ํ ์ํฌ์ ์๋ ๋ฐฉ๋ฒ์ด๋ค.
// ์์) ์ต์ ํ ์ (X)
//UserList.jsx
function UserList() {
{...}
return (
<div>
<input
type="text"
value={text}
placeholder="์๋ฌด ๋ด์ฉ์ด๋ ์
๋ ฅํ์ธ์."
onChange={(event) => setText(event.target.value)}
/>
{...}
</div>
);
}
export default UserList;
// ์์) ์ต์ ํ ํ(O)
//UserList.jsx
function UserList() {
{...}
return (
<div>
<input
ref={searchRef}
type="text"
placeholder="์๋ฌด ๋ด์ฉ์ด๋ ์
๋ ฅํ์ธ์."
onKeyUp={() => {
let searchQuery = searchRef.current.value.toLowerCase();
setTimeout(() => {
if (searchQuery === searchRef.current.value.toLowerCase()) {
setText(searchQuery);
}
}, 400);
}}
/>
{...}
</div>
);
}
export default UserList;