본문 바로가기

JavaScript/React JS

[React JS] setState

배열 관련해서

const x = [1,2,3] 이런 배열이 있다면

기존에는

const a = x[0] ===> 1

const b = x[1] ===> 2

... 으로 했지만

const [a, b, c] = x; 으로도 가능하다. (코드를 짧게 만들 수 있음)

 

React.useState(우리가 담으려는 data 값, data 값을 바꿀때 사용할 modifier)

modifier(원하는 변경값, 함수) 를 넣으면 업데이트 및 자동적으로 reRender이 된다.

const [a,setA] = React.useState(0);
const onClick = () => {
	setA(a + 1);
}

만약 버튼이 있고 버튼에 onclick이 적용되어 있다면 클릭 시 자동적으로 숫자가 올라가게 된다.

<!DOCTYPE html>
<html lang="en">
<body>
    <span>Total clicks: 0</span>
    <button id="btn">Click me</button>
</body>
<script>
    let counter = 0;
    const btn = document.getElementById("btn");
    const span = document.querySelector("span");
    function handleClick() {
        counter = counter + 1;
        span.innerText = `Total clicks: ${counter}`;
    }
    btn.addEventListener("click", handleClick);
</script>
</html>

used Vanilla JS

<!DOCTYPE html>
<html lang="en">
<body>
    <div id="root"></div>
</body>
<script src="https://unpkg.com/react@17.0.2/umd/react.production.min.js"></script>
<script src="https://unpkg.com/react-dom@17.0.2/umd/react-dom.production.min.js"></script>
<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<script type="text/babel">
    const root = document.getElementById("root");
    function App() {
        let [counter, modifier] = React.useState(0);
        const onClick = () => {
            modifier(counter+1);
        }
        return 
            (<div>
                <h3>Total clicks: {counter}</h3>
                <button onClick={onClick}>Click me</button>
            </div>)
        }
    ReactDOM.render(<App />, root);
</script>
</html>

used React JS

const [a,setA] = React.useState(0);
const onClick = () => {
	//setA(a + 1);
    setA((current) => current + 1);
}

같은 결과 값이 나오지만 아래의 함수형식의 setA 결과값이 더 안전하다.

'JavaScript > React JS' 카테고리의 다른 글

[React JS] Memo  (0) 2022.01.20
[React JS] Props  (0) 2022.01.18
[React JS] state 활용하기2  (0) 2022.01.16
[React JS] state를 활용 해보기  (0) 2021.11.16
[React JS] React JS, JSX  (0) 2021.11.13