화면에 무엇이든 렌더링하려면 ReactDOM.renderReact
의 메서드를 사용합니다.
ReactDOM.render(element, container[, callback]);
element
: 모든 HTML 요소, JSX 또는 JSX를 반환하는 구성 요소가 될 수 있습니다.container
: 데이터를 렌더링하려는 UI의 요소입니다.callback
: 화면에 무언가가 렌더링되거나 다시 렌더링되면 호출되는 전달할 수 있는 선택적 함수입니다.import React from "react";
import ReactDOM from "react-dom";
const rootElement = document.getElementById("root");
ReactDOM.render(<h1>Welcome to React!</h1>, rootElement);
import React from "react";
import ReactDOM from "react-dom";
const rootElement = document.getElementById("root");
let counter = 0;
const handleClick = () => {
counter++;
console.log("counter", counter);
};
const content = (
<div>
<button onClick={handleClick}>Increment counter</button>
<div>Counter value is {counter}</div>
</div>
);
ReactDOM.render(content, rootElement);
import React from "react";
import ReactDOM from "react-dom";
const rootElement = document.getElementById("root");
let counter = 0;
const handleClick = () => {
counter++;
console.log("counter", counter);
renderContent();
};
const renderContent = () => {
const content = (
<div>
<button onClick={handleClick}>Increment counter</button>
<div>Counter value is {counter}</div>
</div>
);
ReactDOM.render(content, rootElement);
};
renderContent();
React에서 컴포넌트를 생성하는 방법은 크게 두 가지가 있습니다.
Hook을 포함한 함수 기반 구성 요소뿐만 아니라 클래스 기반 구성 요소로 작업하는 방법을 알고 있어야 합니다.
setState(updater, [callback])
setState
호출하면 전체 구성 요소와 모든 하위 구성 요소가 자동으로 다시 렌더링됩니다. renderContent
함수를 사용하여 이전에 본 것처럼 수동으로 다시 렌더링할 필요가 없습니다 .
import React from "react";
import ReactDOM from "react-dom";
class Counter extends React.Component {
constructor(props) {
super(props);
this.state = {
counter: 0
};
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
this.setState((prevState) => {
return {
counter: prevState.counter + 1
};
});
console.log("counter", this.state.counter);
}
render() {
const { counter } = this.state;
return (
<div>
<button onClick={this.handleClick}>Increment counter</button>
<div>Counter value is {counter}</div>
</div>
);
}
}
const rootElement = document.getElementById("root");
ReactDOM.render(<Counter />, rootElement);
console.log에 찍히는 값이 이전 값이 찍히는것을 확인해 볼 수 있다. 그이유는 setState
함수가 본질적으로 비동기이기 때문입니다.
setState는 값을 1씩 증가시키도록 호출했지만 counter값이 즉시 증가하지 않습니다. 함수를 호출할 때 setState전체 구성 요소가 다시 렌더링되기 때문입니다. 따라서 React는 Virtual DOM 알고리즘을 사용하여 변경해야 할 모든 것을 확인한 다음 UI의 효율적인 업데이트를 위해 다양한 검사를 수행해야 합니다.
setState는 React에서 비동기식이라는 점을 염두에 두고 코드를 작성하지 않으면 디버그하기 어려운 문제가 발생하므로 React에서 명심해야 할 매우 중요한 사항입니다.
handleClick() {
this.setState(
(prevState) => {
return {
counter: prevState.counter + 1
};
},
() => console.log("counter", this.state.counter)
);
}
여기에서 setState함수 호출을 위해 두 개의 인수를 전달합니다.
1. 새로운 상태를 반환하는 함수이고
2. 상태가 업데이트되면 호출될 콜백 함수입니다. 콜백 함수에서 콘솔에 업데이트된 카운터 값을 기록할 뿐입니다.
constructor(props) {
super(props);
this.state = {
counter: 0
};
this.handleClick = this.handleClick.bind(this);
}
state = {
counter: 0
};
handleClick = () => {
this.setState((prevState) => {
return {
counter: prevState.counter + 1
};
});
};
화살표 함수에는 자체 this - context가 없으므로 context 클래스로 사용하므로 메서드 .bind를 사용할 필요가 없습니다.
이렇게 하면 모든 이벤트 핸들러를 계속 바인딩할 필요가 없으므로 코드가 훨씬 간단하고 이해하기 쉽습니다.
this.setState((prevState) => ({ counter: prevState.counter + 1 }));
위의 코드에서 첫 번째 인수로 함수를 사용 setState했지만 객체를 인수로 전달할 수도 있습니다.
아래의 예제는 input값에 입력받은 값을 화면UI에 표기해줍니다.
class User extends React.Component {
state = {
name: "Mike"
};
handleChange = (event) => {
const value = event.target.value;
this.setState({ name: value });
};
render() {
const { name } = this.state;
return (
<div>
<input
type="text"
onChange={this.handleChange}
placeholder="Enter your name"
value={name}
/>
<div>Hello, {name}</div>
</div>
);
}
}
const User = (props) => {
const { name, email } = props;
const { first, last } = name;
return (
<div>
<p>
Name: {first} {last}
</p>
<p>Email: {email} </p>
<hr />
</div>
);
};
버전 16.8.0부터 React는 Hooks를 도입했습니다. 그리고 그들은 React에서 코드를 작성하는 방식을 완전히 바꿨습니다. React Hooks를 사용하면 기능 구성 요소 내에서 상태 및 라이프사이클 메서드를 사용할 수 있습니다.
const [counter, setCounter] = useState(0);
import React, { useState } from "react";
import ReactDOM from "react-dom";
const App = () => {
const [counter, setCounter] = useState(0);
return (
<div>
<div>
<p>Counter value is: {counter} </p>
<button onClick={() => setCounter(counter + 1)}>Increment</button>
</div>
</div>
);
};
ReactDOM.render(<App />, document.getElementById("root"));
두 개의 문자열을 하나의 문자열로 만들어주는 역활을 한다.
입력값을 문자열 대신 배열을 사용하면 두 개의 배열을 하나의 배열로 만들어준다.
var str1 = "con";
var str2 = "cat";
console.log(str1.concat(str2)); // concat