JavaScript XML์ ์ฝ์๋ก, ๋ฆฌ์กํธ์์ ์ฌ์ฉํ๋ ํน์ํ ๋ฌธ๋ฒ์ด๋ค. JSX๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฌธ๋ฒ์ ํ์ฅํด์ฃผ๋ Babel์ ํตํด JavaScript๋ก ๋ณํํ ์ ์๋ค.
JSX ๊ฐ JavaScript ๋ก ์ ๋๋ก ๋ณํ์ด ๋๋ ค๋ฉด ์ง์ผ์ฃผ์ด์ผ ํ๋ ๋ช๊ฐ์ง ๊ท์น์ด ์๋ค.
<main> /* ์๋ฌ ๋ฐ์ */ <main> </main> /* ์ ์ ์๋ */
<main> </main> /* ์ ์ ์๋ */ <main /> /* ์ ์ ์๋ */
function App() { return ( <div> <h1>Hello GYUUUL 1!</h1> <h1>Hello GYUUUL 2!</h1> </div> ); }
JSX ๊ท์น ์ค 4๋ฒ์ ๋ณด๋ฉด "์ต์์ ํ๊ทธ๋ ๊ผญ 1๊ฐ์ฌ์ผ ํ๋ค."๋ผ๋ ๊ท์น์ด๋ค.
ํ์ง๋ง ๊ฐ์ธ๋ ๋ชฉ์ ์ผ๋ก๋ง ๊ณ์ div๋ฅผ ์ฌ์ฉํ๋ฉด, ์ฝ๋๊ฐ ๋ณต์กํด์ง๊ณ table ๊ด๋ จ ํ๊ทธ๋ฅผ ์ฌ์ฉํ ๋๋ ์ ๋งคํด์ง๋ค. ๊ทธ๋์ ๋์จ ๊ฒ์ด ๋ฆฌ์กํธ์ Fragment์ด๋ค.
<Fragment> <header> <h1>Hello GYUUUL 1</h1> </header> <main> <h1>Hello GYUUUL 2</h1> </main> </Fragment>
<> <header> <h1>Hello GYUUUL 1</h1> </header> <main> <h1>Hello GYUUUL 2</h1> </main> </>
Fragment๋ ์ฒซ ๋ฒ์งธ์ฒ๋ผ Fragment ํ๊ทธ๋ฅผ ์ด์ฉํ์ฌ ์ฌ์ฉํ ์๋ ์๊ณ , ๋ ๋ฒ์งธ์ฒ๋ผ ๋น ํ๊ทธ๋ก ์ฌ์ฉํ ์ ์๋ค.
JSX์ CSS ๋ฌธ๋ฒ์ ์ ์ฉ์ํฌ ๋ ๋ฐฉ๋ฒ์ด ๋ ๊ฐ์ง๊ฐ ์๋ค.
1. src ํด๋์ App.css ํ์ผ ์์ฑ
2. JSX์ style ์์ฑ ์ ์ฉ
์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ผ๋ก ํ๋ค๋ฉด ๊ธฐ์กด CSS์ ์คํ์ผ ์์ฑ ์์ ํ ๊ฒ์ฒ๋ผ ํ๋ฉด ๋๋ค.
ํ์ง๋ง ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ์คํ์ผ์ ์ ์ํ ๋ '-'๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ c์นด๋ฉ ์ผ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑํฉ๋๋ค.
<div style={{backgroundColor:"black", color:"white"}}></div>
์ด์ ๊ฐ์ด background-color ๋ผ๊ณ ์์ฑํ๋ ๋์ backgroundColor ์ฒ๋ผ ์์ฑํ๋ค.
<h1 style='background-color:black; color:white' >Hello GYUUUL! </h1>
<h1 style={{backgroundColor:"black", color:"white"}}> Hello GYUUUL! </h1>
in-line ์คํ์ผ๋ก ์ ์ฉํ ๋ ์ค๋ธ์ ํธ ํํ๋ก ์์ฑํด์ผ ํ๋ค. ์ค๋ธ์ ํธ ํํ๋ ์๋์ ๊ฐ์ด key์ value๋ฅผ ์ง์ ์ง์ด ์์ฑํ๋ค.
function App() { const name = 'react'; const style = { backgroundColor: 'black', color: 'aqua', fontSize: 24, // ๊ธฐ๋ณธ ๋จ์ px padding: '1rem' // ๋ค๋ฅธ ๋จ์ ์ฌ์ฉ ์ ๋ฌธ์์ด๋ก ์ค์ }
JSX์์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ณ์๋ช ์ ์ฌ์ฉํ ๋๋ ์ค๊ดํธ๋ก ๊ฐ์ธ์ค์ผ ํ๋ค.
function App() { const name = 'GYUUUL'; return ( <div> <h1 style={{backgroundColor:"black", color:"white"}}> Hello {name} ! </h1> </div> ); } export default App; // Hello GYUUUL ! ์ถ๋ ฅ
import './App.css'; function App() { const name = 'GYUUUL'; const someStyle = {backgroundColor:"black", color:"white"}; //์นด๋ฉ์ผ์ด์ค ์ ์ง return ( <div> <h1 style={someStyle}> Hello {name} ! </h1> </div> ); } export default App;
๐ ์๋ก๊ณ ์นจ ํ ๋๋ง๋ค ํ์ฌ์๊ฐ ํ์ ๋๋ ๊ฑธ JSX๋ก ๋ํ๋ด๊ธฐ
import './App.css'; function App() { const someStyle = {backgroundColor:"black", color:"white"}; let now = new Date(); // ํ์ฌ ๋ ์ง ๋ฐ ์๊ฐ let year = now.getFullYear(); let month = now.getMonth()+1; let date = now.getDate(); let hours = now.getHours(); let minutes = now.getMinutes() let seconds = now.getSeconds(); return ( <div> <h1 style={{color:'red'}}>๋ : {year} </h1 > <h1 style={someStyle}>์/์ผ: {month}/{date}</h1> <h1 style={someStyle}>์๊ฐ: {hours}์ {minutes}๋ถ {seconds}์ด</h1> </div> ); } export default App;
๐ ์ปดํฌ๋ํธ ๋ง๋ค๊ณ ๊ทธ ์์ ์๋ ๋ฐฐ์ด์ ๊ฐ์ด true๋ฉด ๋ฐฐ๊ฒฝ์ ์ง์ ํด๋ณด๊ธฐ
src ํด๋์ components ํด๋ ์์ฑ ํ TripList.jsx์ TripList.css ํ์ผ์ ์์ฑํ๋ค.
TripList.jsx์ TripList.css์ ๊ฐ๊ฐ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
import './TripList.css' let list = [ { no: 1, area: "๋์ ", visited: false }, { no: 2, area: "๋ถ์ฐ", visited: true }, { no: 3, area: "๋ชฉํฌ", visited: false }, { no: 4, area: "์ ์ฃผ๋", visited: true }, ]; function TripList(){ let areas = list.map((item, index)=>{ return( // mapํ ๊ฒฐ๊ณผ๊ฐ areas์ ์ ์ฅ๋ ํ ๋ฐํ <li key={index} className={item.visited? "list-area-item active":"list-area-item"}>{item.area}</li> )// ํ์ ์์๋ค์ ๊ฐ๊ฐ ๊ณ ์ ํ ํค๊ฐ์ ๊ฐ์ ธ์ผํจ= ์ต์ ํ ๊ด๋ จ // visited๊ฐ true๋ฉด ํด๋์ค๋ช ์ด list-area-item active, false๋ฉด list-area-item์ด๋ค. }); return <ul className="list-area">{areas}</ul> } export default TripList;
.list-area { padding: 0; list-style: none; } .list-area-item { border: 1px solid black; } /* ์ ์ด ๊ฒน์ณ์ 2px์ด ๋๋ ๊ฑธ ๋ง์์ค */ .list-area-item+.list-area-item { border-top: none; } .list-area-item.active { background-color: royalblue; color: aliceblue; }
import './App.css'; import TripList from './components/tripList/TripList' //์นํฉ๋๋ฌธ์ cssํ์ผ์ ๋ถ๋ฌ์ฌ ์ ์์ function App() { return ( <div> <TripList /> </div> ); } export default App;