<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>React + TypeScript + Replit</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/index.jsx"></script>
<!--
This script places a badge on your repl's full-browser view back to your repl's cover
page. Try various colors for the theme: dark, light, red, orange, yellow, lime, green,
teal, blue, blurple, magenta, pink!
-->
<script src="https://replit.com/public/js/replit-badge.js" theme="blue" defer></script>
</body>
</html>
body - id가 root인 div와 index.jsx를 호출하는 srcipt를 명시
import React from 'react'
import ReactDOM from 'react-dom/client'
import App from './App'
ReactDOM.createRoot(document.getElementById('root')).render(
<React.StrictMode>
<App />
</React.StrictMode>
)
index.jsx 또는 main.jsx
import ReactDOM from 'react-dom/client' : 서버와 상관없이 내 컴퓨터 안에서만 작동(reload)
import App from './App' : App.jsx를 받아옴.
ReactDOM.createRoot(document.getElementById('root')).render() :
root에 App.jsx에서 만든 내용들을 index.html로 보냄.
import './App.css'
export default function App() {
//App을 반환시킴. (main을)
const name = "여러분";
const style = { color: "orange", fontSize: "16px" }
//객체형태로 정의
const clickMe = () => {
alert("눌렀네");
}
return (
<>
<h1 className="title">HI{name}</h1>
<h1 style={style} onClick={clickMe}>{name}good morning</h1>
{['🍕', '🍔'].map(item => <h1>{item}</h1>)}
<p>오늘은 React의 기본 문법을 배움.<br></br>어렵다</p>
</>
)
}
jsx방식
html + javascript
css에서 만든 내용을 App.jsx에 적용.
class가 아닌 className.
하나의 요소만 return 할 수 있음 -> 형제노드를 쓸 수 없고 감싸주어야 함.
<></>도 가능.<React.fragment></<React.fragment> //오롯이 감싸주는 용도로만 쓰이는 태그
js코드 사용시 {변수, 함수}
태그는 꼭 쌍으로 있어야 함.
onclick = 함수명 (X)
onClick = {함수명} (O)
내부에서 스타일시트를 사용할 땐 객체형태로 정의
동일구문
function App() {
...
}
export default App;
.title{
text-align : center;
color : green;
font-size : 50px
}
import React from 'react';
function Box() {
return (
<>
<div className="box">
Box1
</div>
<div className="box">
Box2
</div>
<div className="box">
Box3
</div>
<div className="box">
Box4
</div>
</>
)
}
export default Box;
Box Component를 만들었고, 그것을 외부로 보낼 것.
import React from 'react';
import './App.css'
import Box from './Box'
export default function App() {
return (
<Box>
</Box>
)
}
.box{
border : 2px solid orange;
width : 100px;
height : 100px;
margin : 0 auto;
text-align : center;
}
React 컴포넌트에 전달되는 모든 데이터.
HTML 요소는 속성을 가지고 있고 React 컴포넌트는 props를 가짐.
컴포넌트 호출 안에 쓰임.
prop="value"와 같이 HTML 속성과 동일한 구문.
오직 부모 컴포넌트에서 자식 컴포넌트로 내려감.
import './App.css'
import Box from './component/Box.jsx'
export default function App() {
return (
<>
<Box num='1' name='제니' />
<Box num='2' name='로제' />
<Box num='3' name='리사' />
<Box num='4' name='지수' />
</>
)
}
import React from 'react'
const Box = ({num, name}) => {
const clickBtn = () => {
alert('LET USE REACT COMPONENT!!')
}
return (
<div className = "box">
BOX0{num}<br />
{name}<br />
<button onClick={clickBtn}>클릭!</button>
</div>
)
}
export default Box;
import './App.css'
import Hello from './Hello.jsx'
import Wrapper from './Wrapper'
export default function App() {
return (
<Wrapper>
<Hello color="red" name = "everyone"/>
<Hello color="green" name = "여러분"/>
<Hello/>
</Wrapper>
)
}
import React from 'react'
function Hello({ color, name }) {
return (
<h3 style={{ color: color }}>
안녕하세요{name}
</h3 >
)
}
Hello.defaultProps = { name: "..." }
export default Hello;
import React from "react";
function Wrapper({ children }) {
const bStyle =
{
border: '2px solid gray',
padding: '16px',
margin: 50
}
return (
<div style={bStyle}>
{children}
</div>
)
}
export default Wrapper;
children이 없다면..