Unknown Prop Warning
์ฌ๋ฐ๋ฅธ DOM ์ดํธ๋ฆฌ๋ทฐํธ/ํ๋กํผํฐ๋ก ์ธ์๋์ง ์๋ DOM ์๋ฆฌ๋จผํธ๋ฅผ ๋ ๋๋งํ๋ ค๊ณ ํ๋ฉด unknown-prop ๊ฒฝ๊ณ ๊ฐ ๋ฐ์ํฉ๋๋ค. DOM ์๋ฆฌ๋จผํธ์ ์๋ชป๋ props๊ฐ ์ถ๊ฐ๋์ง ์๋๋ก ํด์ผ ํฉ๋๋ค.
์ด ๊ฒฝ๊ณ ๊ฐ ํ์๋๋ ๋ช ๊ฐ์ง ์ด์ ๊ฐ ์์ต๋๋ค.
{...this.props}
๋๋cloneElement(element, this.props)
๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๊น? ๊ทธ๋ ๋ค๋ฉด ์ปดํฌ๋ํธ๊ฐ ์๊ธฐ ์์ ์ props๋ฅผ ์์ ์๋ฆฌ๋จผํธ๋ก ์ง์ ์ ๋ฌํ๋ ๊ฒฝ์ฐ์ ๋๋ค. (์์. props ์ ๋ฌ) ์์ ์ปดํฌ๋ํธ๋ก props๋ฅผ ์ ๋ฌํ ๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์ฌ์ฉ๋๋ props๋ฅผ ์ค์๋ก ์ ๋ฌํ์ง ์๋๋ก ํด์ผ ํฉ๋๋ค.- ์ฌ์ฉ์ ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ํ๋ด๊ธฐ ์ํด ๋ค์ดํฐ๋ธ DOM ๋ ธ๋์์ ๋นํ์ค DOM ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ๊ฒฝ์ฐ์ ๋๋ค. ํ์ค DOM ์๋ฆฌ๋จผํธ์ ์ฌ์ฉ์ ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ ค๋ ๊ฒฝ์ฐ MDN์ ์ค๋ช ๋ ์ฌ์ฉ์ ์ ์ data ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์ฌ์ฉํด๋ณด์ธ์.
- React๊ฐ ์์ง ์ง์ ๋ ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์ธ์ํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ์ ๋๋ค. ์ด๊ฒ์ ๋ค์ React ๋ฒ์ ์์ ์์ ๋ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ React๋ ํ์ฌ ์ ์ ์๋ ๋ชจ๋ ์ดํธ๋ฆฌ๋ทฐํธ๋ฅผ ์ ๊ฑฐํ๋ฏ๋ก React ์ฑ์์ ๋ ๋๋ง๋์ง ์์ต๋๋ค.
- React ์ปดํฌ๋ํธ ์ด๋ฆ์ ๋๋ฌธ์๊ฐ ํฌํจ๋์ด ์์ง ์์ ๊ฒฝ์ฐ์ ๋๋ค. React JSX์์๋ ๋์๋ฌธ์ ๊ท์น์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ ์ ์ปดํฌ๋ํธ์ DOM ํ๊ทธ๋ฅผ ๊ตฌ๋ณํ๊ธฐ ๋๋ฌธ์ React ์ปดํฌ๋ํธ์ ๋๋ฌธ์๊ฐ ์๋ค๋ฉด ์ด๊ฒ์ DOM ํ๊ทธ๋ก ํด์ํฉ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด, ํฉ์ฑ ์ปดํฌ๋ํธ๋ ์์ ์ปดํฌ๋ํธ๋ฅผ ์ํด ๋ง๋ค์ด์ง ๊ฒ์ด ์๋ ํฉ์ฑ ์ปดํฌ๋ํธ๋ฅผ ์ํด ๋ง๋ค์ด์ง ๋ชจ๋ props๋ฅผ โ์๋นํด์ผ ํฉ๋๋คโ. ์๋ฅผ ๋ค์ด,
๊ธ์ง ์๊ธฐ์น ์์ layout
prop์ด div
ํ๊ทธ์ ์ ๋ฌ๋ฉ๋๋ค.
function MyDiv(props) {
if (props.layout === 'horizontal') {
// ๊ธ์ง! "layout"์ <div> ๊ฐ ์ดํดํ๋ prop์ด ์๋๊ธฐ ๋๋ฌธ์
๋๋ค.
return <div {...props} style={getHorizontalStyle()} />
} else {
// ๊ธ์ง! "layout"์ <div> ๊ฐ ์ดํดํ๋ prop์ด ์๋๊ธฐ ๋๋ฌธ์
๋๋ค.
return <div {...props} style={getVerticalStyle()} />
}
}
๊ถ์ฅ ์ ๊ฐ ์ฐ์ฐ์(spread operator)๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ์๋ฅผ props์์ ๋นผ๋ด๊ณ ๋๋จธ์ง props๋ฅผ ๋ณ์์ ๋ฃ์ ์ ์์ต๋๋ค.
function MyDiv(props) {
const { layout, ...rest } = props
if (layout === 'horizontal') {
return <div {...rest} style={getHorizontalStyle()} />
} else {
return <div {...rest} style={getVerticalStyle()} />
}
}
๊ถ์ฅ ์ ๊ฐ์ฒด์ props๋ฅผ ๋ณต์ฌํ๊ณ ์ ๊ฐ์ฒด์์ ์ฌ์ฉ ์ค์ธ key๋ฅผ ์ญ์ ํ ์๋ ์์ต๋๋ค. ์๋ this.props
๊ฐ์ฒด์์ ๊ทธ ๊ฐ์ฒด๋ฅผ ์ญ์ ํ๋ฉด ์๋ฉ๋๋ค. ์๋ํ๋ฉด ๊ทธ ๊ฐ์ฒด๋ ๋ถ๋ณ์ด์ด์ผ ํ๊ธฐ ๋๋ฌธ์
๋๋ค.
function MyDiv(props) {
const divProps = Object.assign({}, props);
delete divProps.layout;
if (props.layout === 'horizontal') {
return <div {...divProps} style={getHorizontalStyle()} />
} else {
return <div {...divProps} style={getVerticalStyle()} />
}
}