💡 노마드 코더의 React 강의로 React 공부 시작!
책도 사고, 강의도 빨리 들어서 React 가 뭔지 공부해보자!
<!DOCTYPE html>
<html>
<body>
<span>Total Clicks : 0</span>
<button id="btn">Click me</button>
</body>
<script type="text/javascript">
let counter= 0;
const button = document.getElementById("btn");
const span = document.querySelector('span');
function handleClick() {
counter = counter + 1;
span.innerText = `Total Clicks : ${counter}`;
}
button.addEventListener('click', handleClick)
</script>
</html>
getElementById
와 querySelector
로 요소를 가져온 다음, addEventListener
로 handleClick
함수를 발생시켜줘야 한다.<script crossorigin src="https://unpkg.com/react@17/umd/react.production.min.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.production.min.js"></script>
<script>
const root = document.getElementById('root');
const span = React.createElement(
'span',
{ id: "sexy-span", style: {color:"red"} },
"Hello, I'm a span"
);
ReactDOM.render(span, root);
</script>
React.createElement(1, 2, 3);
: 태그를 생성해준다.render(1, 2)
: 페이지를 렌더링, 즉 페이지에 보여줌<script>
const root = document.getElementById('root');
// const span = React.createElement('span', { id: "sexy-span", style: {color:"red"} }, "Hello, I'm a span");
const h3 = React.createElement('h3', {onMouseEnter: () => console.log('h3 touched')}, "Hello, I'm a span");
const btn = React.createElement('button', {onClick: () => console.log("I'm clicked")}, "Click me");
const container = React.createElement('div', null, [h3, btn]);
// ReactDOM.render(span, root);
// ReactDOM.render(btn, root);
ReactDOM.render(container, root);
</script>
createElement
의 속성부분 적는 곳에는 이벤트 핸들러도 작성 가능하다. 만약 속성이 없다면 null
을 적어주면 된다.h3
, btn
각 각 렌더링 하는 것 보다 container
안에 담아서 container 하나만 렌더링 하는 것이 더 편하다.[]
안에 태그 명을 넣어 주면 된다.<script>
const root = document.getElementById('root');
// jsx를 이용해서 createElement 대체하기
const Title = (
<h3 id="title" onMouseEnter={() => console.log("h3 touched")}>
Hello, I'm a span
</h3>
);
const Button = (<button style={{ backgroundColor: "tomato", }} onClick={() => console.log("I'm clicked")}>Click me</button>);
const container = React.createElement('div', null, [h3, btn]);
ReactDOM.render(container, root);
</script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<script type="text/babel">
<script type="text/babel">
const root = document.getElementById('root');
// jsx를 이용해서 createElement 대체하기
function Title() {
return (
<h3 id="title" onMouseEnter={() => console.log("h3 touched")}>
Hello, I'm a span
</h3>
);
}
const Button = () => (<button style={{ backgroundColor: "tomato", }} onClick={() => console.log("I'm clicked")}>Click me</button>);
/* 컴포넌트의 첫 글자는 반드시 대문자
소문자로 작성하면 react랑 JSX는 HTML button태그라고 생각함 */
const Container = (
<div>
<Title />
<Button />
</div>
);
ReactDOM.render(Container, root);
<Button />
과 <button />
은 엄현히 다른 것!!const Container = () => (
<div>
<Title />
<Button />
</div>
);
ReactDOM.render(<Container />, root);
<script type="text/babel">
const root = document.getElementById('root');
let counter = 0;
function countUp() {
counter = counter + 1;
}
const Container = () => (
<div>
<h3>Total Clicks : {counter}</h3>
<button onClick={countUp}>Click me</button>
</div>
);
ReactDOM.render(<Container />, root);
</script>
counter
변수를 만들어 줬다.countUp
함수를 만들어 줬다.{변수명}
<- 이런식으로 작성해준다.<script type="text/babel">
const root = document.getElementById('root');
let counter = 0;
function countUp() {
counter = counter + 1;
// 리렌더링 하기
ReactDOM.render(<Container />, root);
}
const Container = () => (
<div>
<h3>Total Clicks : {counter}</h3>
<button onClick={countUp}>Click me</button>
</div>
);
ReactDOM.render(<Container />, root); // 페이지 업로드 될 때 1번 렌더링 된다.
</script>
ReactDOM.render(<Container />, root);
이 문장을 함수에 담아서 함수를 재사용한다.<script type="text/babel">
const root = document.getElementById('root');
let counter = 0;
function countUp() {
counter = counter + 1;
render(); // 리렌더링 하기
}
function render() {
ReactDOM.render(<Container />, root);
}
const Container = () => (
<div>
<h3>Total Clicks : {counter}</h3>
<button onClick={countUp}>Click me</button>
</div>
);
render(); // 제일 처음페이지 렌더링
</script>
function Container() {
return (
<div>
<h3>Total Clicks : {counter}</h3>
<button onClick={countUp}>Click me</button>
</div>
);
}
react.js
는 이전에 렌더링된 컴포넌트는 어떤거였는지 확인하고, 다음에 렌더링될 컴포넌트는 어떤지를 보고 다른 부분만 파악한다.