isValidElement
isValidElement
๋ ๊ฐ์ด React ์๋ฆฌ๋จผํธ์ธ์ง ํ์ธํฉ๋๋ค.
const isElement = isValidElement(value)
๋ ํผ๋ฐ์ค
isValidElement(value)
isValidElement(value)
๋ฅผ ํธ์ถํ์ฌ value
๊ฐ React ์๋ฆฌ๋จผํธ์ธ์ง ํ์ธํฉ๋๋ค.
import { isValidElement, createElement } from 'react';
// โ
React ์๋ฆฌ๋จผํธ
console.log(isValidElement(<p />)); // true
console.log(isValidElement(createElement('p'))); // true
// โ React ์๋ฆฌ๋จผํธ๊ฐ ์๋
console.log(isValidElement(25)); // false
console.log(isValidElement('Hello')); // false
console.log(isValidElement({ age: 42 })); // false
์๋์์ ๋ ๋ง์ ์์๋ฅผ ํ์ธํ์ธ์
๋งค๊ฐ๋ณ์
value
: ํ์ธํ๋ ค๋ value
์
๋๋ค. ๋ชจ๋ ์ข
๋ฅ์ ๊ฐ์ด ๋ ์ ์์ต๋๋ค.
๋ฐํ
isValidElement
๋ value
๊ฐ React ์๋ฆฌ๋จผํธ์ธ ๊ฒฝ์ฐ true
๋ฅผ ๋ฐํํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด false
๋ฅผ ๋ฐํํฉ๋๋ค.
์ฃผ์์ฌํญ
createElement
๊ฐ ๋ฐํํ JSX ํ๊ทธ์ ๊ฐ์ฒด๋ React ์๋ฆฌ๋จผํธ๋ก ๊ฐ์ฃผํฉ๋๋ค. ์๋ฅผ ๋ค์ด,42
์ ๊ฐ์ ์ซ์๋ ์ ํจํ React ๋ ธ๋ (์ปดํฌ๋ํธ์์ ๋ฐํ๋ ์ ์์ง๋ง)์ด์ง๋ง, ์ ํจํ React ์๋ฆฌ๋จผํธ๋ ์๋๋๋ค.createPortal
๋ก ๋ง๋ค์ด์ง ๋ฐฐ์ด๊ณผ portal๋ React ์๋ฆฌ๋จผํธ๋ก ๊ฐ์ฃผํ์ง ์์ต๋๋ค.
์ฌ์ฉ๋ฒ
์ด๋ค ๊ฒ์ด React ์๋ฆฌ๋จผํธ์ธ์ง ํ์ธํ๊ธฐ
์ด๋ค ๊ฐ์ด React ์๋ฆฌ๋จผํธ์ธ์ง ํ์ธํ๋ ค๋ฉด isValidElement
๋ฅผ ํธ์ถํด ๋ณด์ธ์.
React ์๋ฆฌ๋จผํธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- JSX tag๋ฅผ ์์ฑํ์ฌ ์์ฑ๋ ๊ฐ
createElement
๋ฅผ ํธ์ถํ์ฌ ์์ฑ๋ ๊ฐ
React ์๋ฆฌ๋จผํธ์ ๊ฒฝ์ฐ isValidElement
๋ true
๋ฅผ ๋ฐํํฉ๋๋ค.
import { isValidElement, createElement } from 'react';
// โ
JSX ํ๊ทธ๋ React ์๋ฆฌ๋จผํธ์
๋๋ค.
console.log(isValidElement(<p />)); // true
console.log(isValidElement(<MyComponent />)); // true
// โ
createElement๊ฐ ๋ฐํํ๋ ๊ฐ์ React ์๋ฆฌ๋จผํธ์
๋๋ค.
console.log(isValidElement(createElement('p'))); // true
console.log(isValidElement(createElement(MyComponent))); // true
๋ฌธ์์ด, ์ซ์, ์์์ ๊ฐ์ฒด ๋ฐ ๋ฐฐ์ด๊ณผ ๊ฐ์ ๊ฐ๋ค์ React ์๋ฆฌ๋จผํธ๊ฐ ์๋๋๋ค.
์ด ๊ฒฝ์ฐ isValidElement
๋ false
๋ฅผ ๋ฐํํฉ๋๋ค.
// โ ์ด๊ฒ๋ค์ React ์๋ฆฌ๋จผํธ๊ฐ *์๋๋๋ค*.
console.log(isValidElement(null)); // false
console.log(isValidElement(25)); // false
console.log(isValidElement('Hello')); // false
console.log(isValidElement({ age: 42 })); // false
console.log(isValidElement([<div />, <div />])); // false
console.log(isValidElement(MyComponent)); // false
isValidElement
๊ฐ ํ์ํ ๊ฒฝ์ฐ๋ ๋งค์ฐ ๋๋ญ
๋๋ค. ์ฃผ๋ก โ์๋ฆฌ๋จผํธ๋งโ ํ์ฉํ๋ ๋ค๋ฅธ API๋ฅผ ํธ์ถํ ๋์ (cloneElement
๊ฐ ํ๋ ๊ฒ์ฒ๋ผ) ์ธ์๊ฐ React ์๋ฆฌ๋จผํธ๊ฐ ์๋ ๊ฒฝ์ฐ ์ค๋ฅ๋ฅผ ํผํ๊ณ ์ถ์ ๋ ์ ์ฉํฉ๋๋ค.
isValidElement
ํ์ธ์ ์ถ๊ฐ ํด์ผ ํ๋ ๊ตฌ์ฒด์ ์ธ ์ด์ ๊ฐ ์๋ ํ ์ด ํ์ธ์ ํ์ํ์ง ์์ ์ ์์ต๋๋ค.
Deep Dive
์ปดํฌ๋ํธ๋ฅผ ์์ฑํ ๋ ๋ชจ๋ ์ข ๋ฅ์ React ๋ ธ๋๋ฅผ ๋ฐํํ ์ ์์ต๋๋ค.
function MyComponent() {
// ... React ๋
ธ๋๋ฅผ ๋ฐํํ ์ ์์ต๋๋ค. ...
}
React ๋ ธ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
<div />
๋๋createElement('div')
์ ๊ฐ์ด ์์ฑ๋ React ์๋ฆฌ๋จผํธ์ ๋๋ค.createPortal
๋ก ์์ฑ๋ portal์ ๋๋ค.- ๋ฌธ์์ด
- ์ซ์
true
,false
,null
, ๋๋undefined
(ํ์๋์ง ์๋ ๊ฒฝ์ฐ)- ๋ค๋ฅธ React ๋ ธ๋์ ๋ฐฐ์ด
์ฃผ์ isValidElement
๋ ์ธ์๊ฐ React ๋
ธ๋์ ์ฌ๋ถ๊ฐ ์๋๋ผ React ์๋ฆฌ๋จผํธ์ ์ฌ๋ถ๋ฅผ ํ์ธํฉ๋๋ค. ์๋ฅผ ๋ค์ด 42
๋ ์ ํจํ React ์๋ฆฌ๋จผํธ๊ฐ ์๋๋๋ค. ํ์ง๋ง ์๋ฒฝํ๊ฒ ์ ํจํ React ๋
ธ๋์
๋๋ค.
function MyComponent() {
return 42; // ์ปดํฌ๋ํธ์์ ์ซ์๋ฅผ ๋ฐํํด๋ ๊ด์ฐฎ์ต๋๋ค.
}
์ด๊ฒ์ด ๋ฌด์ธ๊ฐ๋ฅผ ๋ ๋๋งํ ์ ์๋์ง ํ์ธํ๋ ์ฌ๋ถ๋ก isValidElement
๋ฅผ ์ฌ์ฉํด์๋ ์ ๋๋ ์ด์ ์
๋๋ค.