React Quickly
์ฑ
์ ์ฝ๋ ์ค๋ํซ์ ๋ฐ๋ฅด๊ณ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ babel์ ํตํด ์ปดํ์ผ๋ ์ฝ๋๋ฅผ ์คํํ ์ ์์ต๋๋ค.
๋ด ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
class DateTimeNow extends React.Component{
render(){
let dateTimeNow = new Date();
return <span>Current date and time is {dateTimeNow}.</span>;
}
}
ReactDOM.render(
<DateTimeNow/>,
document.getElementById('content')
);
๋ธ๋ผ์ฐ์ ์์ ๋ณด๊ณ ํ ์ค๋ฅ ๋ฉ์์ง๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Uncaught Invariant Violation: Objects are not valid as a React child (found: Mon Oct 17 2016 09:12:00 GMT+0800 (CST)). If you meant to render a collection of children, use an array instead or wrap the object using createFragment(object) from the React add-ons. Check the render method of
DateTimeNow .
์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋์ง ๋ต๋ณ์ ๋์ ์ฃผ์๊ฒ ์ต๋๊น?
๋งค์ฐ ๊ฐ์ฌํฉ๋๋ค!
_๊ธฐ๋ฅ_์ ์์ฒญํ์๊ฒ ์ต๋๊น? ์๋๋ฉด _๋ฒ๊ทธ_๋ฅผ ๋ณด๊ณ ํ์๊ฒ ์ต๋๊น?
ํ์ฌ ํ๋์ ๋ฌด์์
๋๊น?
์ค๋ฅ ๋ฉ์์ง: ์กํ์ง ์์ ๋ถ๋ณ ์๋ฐ: ๊ฐ์ฒด๊ฐ React ์์์ผ๋ก ์ ํจํ์ง ์์ต๋๋ค(๋ฐ๊ฒฌ: Mon Oct 17 2016 09:12:00 GMT+0800 (CST)). ์์ ์ปฌ๋ ์
์ ๋ ๋๋งํ๋ ค๋ ๊ฒฝ์ฐ ๋์ ๋ฐฐ์ด์ ์ฌ์ฉํ๊ฑฐ๋ React ์ ๋์จ์์ createFragment(object)๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ๋ํํฉ๋๋ค. DateTimeNow
์ ๋ ๋๋ง ๋ฐฉ๋ฒ์ ํ์ธํ์ญ์์ค.
ํ์ฌ ๋์์ด ๋ฒ๊ทธ์ธ ๊ฒฝ์ฐ https://jsfiddle.net ๋๋ ์ด์ ์ ์ฌํ ๋ฐฉ๋ฒ(ํ ํ๋ฆฟ: https://jsfiddle.net/reactjs/69z2wepo/)์ ํตํด ๋ฌธ์ ๋ฅผ ์ฌํํ๊ณ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์ต์ํ์ ๋ฐ๋ชจ๋ฅผ ์ ๊ณตํ๋ ๋จ๊ณ๋ฅผ ์ ๊ณตํ์ธ์.
์์๋๋ ๋์์ ๋ฌด์์
๋๊น?
span ํ๊ทธ๋ ํ์ฌ ์๊ฐ์ ํ์ํฉ๋๋ค.
์ด๋ค ๋ฒ์ ์ React์ ์ด๋ค ๋ธ๋ผ์ฐ์ /OS๊ฐ ์ด ๋ฌธ์ ์ ์ํฅ์ ๋ฐ๋์?
๋ฐ์ 15.3.2
์งง์ ๋๋ต์ dateTimeNow ๋ณ์์ ๋ํด toString()
๋ฉ์๋๋ฅผ ํธ์ถํด์ผ ํ๋ค๋ ๊ฒ์
๋๋ค. ์ด๋ ๋ฌธ์์ด์ด ์๋๋ผ ๋ ์ง _object_์ด๊ธฐ ๋๋ฌธ์
๋๋ค. ์ฆ, ์ค๋ฅ ๋ฉ์์ง๊ฐ ์ฐธ์กฐํ๋ '๊ฐ์ฒด' ์ค ํ๋์
๋๋ค.
return <span>Current date and time is {dateTimeNow.toUTCString()}.</span>;
์ฆ, ์ค๋ฅ ๋ฉ์์ง๋ ๋จ์ํ ๋ ์ง๋ฅผ ๋ฌธ์์ด๋ก ๋ ๋๋งํ๊ธฐ ๋๋ฌธ์ ์ฒ์์๋ ํผ๋์ค๋ฝ์ต๋๋ค. ์๋ฅผ ๋ค์ด {dateTimeNow}
๋ฅผ { {a: 1} }
์ ๊ฐ์ ๊ฐ์ฒด๋ก
Uncaught Error: Objects are not valid as a React child (found: object with keys {a}).
https://github.com/facebook/react/issues/7988#issuecomment -254148427์ด ๋ง์ต๋๋ค.
๋ ์ง๋ JS์ ๊ฐ์ฒด์ด์ง๋ง ๋ ๋๋ง ์ถ๋ ฅ์๋ React ์์, ๋ฌธ์์ด ๋ฐ ์ซ์๋ง ํฌํจ๋ ์ ์์ต๋๋ค. toString()
์ ์ ์ฌํ ๋ฐฉ๋ฒ์ผ๋ก ๋ฌธ์์ด์ ํฌ๋งทํ๋ฉด ๋ฉ๋๋ค.
MDN ์์ ์ด๋ฌํ ๋ฉ์๋ ๋ชฉ๋ก์ ์ฐพ์ ์ ์์ต๋๋ค.
๊ฑด๋ฐฐ!
์ React๋ ์๋์ผ๋ก ๋ฌธ์์ด ๋ณด๊ฐ์ ์ํด .toString()
๋ฅผ ํธ์ถํ ์ ์๋์? ์ค๋ฒํค๋๊ฐ ๋๋ฌด ๋ง์ต๋๊น?
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์งง์ ๋๋ต์ dateTimeNow ๋ณ์์ ๋ํด
toString()
๋ฉ์๋๋ฅผ ํธ์ถํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ ๋ฌธ์์ด์ด ์๋๋ผ ๋ ์ง _object_์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฆ, ์ค๋ฅ ๋ฉ์์ง๊ฐ ์ฐธ์กฐํ๋ '๊ฐ์ฒด' ์ค ํ๋์ ๋๋ค.์ฆ, ์ค๋ฅ ๋ฉ์์ง๋ ๋จ์ํ ๋ ์ง๋ฅผ ๋ฌธ์์ด๋ก ๋ ๋๋งํ๊ธฐ ๋๋ฌธ์ ์ฒ์์๋ ํผ๋์ค๋ฝ์ต๋๋ค. ์๋ฅผ ๋ค์ด
{dateTimeNow}
๋ฅผ{ {a: 1} }
์ ๊ฐ์ ๊ฐ์ฒด๋ก