본문 바로가기
개발 공부 일지/React

리액트 - state

by yelimu 2024. 7. 31.

컴포넌트에서 보여줘야 하는 내용이 사용자 인터랙션에 따라 바뀌어야 할 때 구현하는 방법 : state 

 

컴포넌트에서 동적인 값을 상태(state)라고 부릅니다. 리액트에 useState 라는 함수가 있는데요, 이것을 사용하면 컴포넌트에서 상태를 관리 할 수 있다.

 

1. import useState : 리액트 패키지에서 꺼내오기 

2. App 컴포넌트에 useState()를 사용한다.  -> 배열을 리턴하는 함수이다. 따라서 [ state, setter함수] 구조분해 사용 

3. num prop으로 전달 

4. Button 요소에 onClick prop으로 전달 

//App
import { useState } from 'react';
import Button from './Button';
import Dice from './Dice';

function App(){
    const [num, setNum] = useState(1); 
    // 파라미터로 초기값(1)을 전달받음 & 배열의 형태로 요소 두개를 리턴한다. -> 배열의 구조분해 문법 사용 
    // 첫번쨰 값 = state 값 = 현재 변수의 값 
    // 두번째 요소 = 세터 함수 = 함수를 호출할때 파라미터로 전달하는 값으로 state가 변경됨 
    // state값에 새로운 값을 할당하는게 아니라 setter 함수를 통해 변경해주어야한다. 

    const handleRollClick = () => {
        setNum(3);
}   

    return (

    <div>
        <div>
        <Button onClick={handleRollClick}>던지기</Button> 
        {/* handleRollClick함수를 던지기 컴포넌트에 onClick prop으로 전달 -> Button 컴포넌트에 prop을 전달해주는 것이므로 Button.js에서 prop을 처리해주어야한다. */} 
        <Button>처음부터</Button>
        </div>
        <Dice color="red" num={num}/> 
        {/* num prop으로 전달  */}
    </div>
    );
}
const numberState = useState(0);
const number = numberState[0];
const setNumber = numberState[1];

구조분해 부분을 풀어쓰면 위 코드와 같다. 

//Button
function Button({ children, onClick }){
    // App에서 onClick prop을 받아 처리한다.
    return <button onClick={onClick}>{children}</button>;
}

부모 컴포넌트에서 onClick prop을 전달받아서 처리해야한다. 

5. button 요소의 onClick 속성에 할당해준다


던지기 버튼을 누를때마다 랜덤한 숫자로 바꿔주기 

 

1. 1~n까지의 랜덤한 숫자를 리턴하는 함수 random(n)을 만들고

2. nextNum이라는 변수에 담아 setNum함수에 넘겨준다.


처음으로 버튼 누르면 1로 돌아가기

1. handleClearClick 함수 만들기 

2. 버튼 onClick prop으로 지정하기

function App(){
    const [num, setNum] = useState(1); 

    const handleRollClick = () => {
        const nextNum = random(6);
        setNum(nextNum);
}   
    const handleClearClick = () => {
        setNum(1);
    }
    return (

    <div>
        <div>
        <Button onClick={handleRollClick}>던지기</Button> 
        <Button onClick={handleClearClick}>처음부터</Button>
        </div>
        <Dice color="red" num={num}/> 
    </div>
    );
}

 

'개발 공부 일지 > React' 카테고리의 다른 글

리액트에 대해 - 리액트를 사용하는 이유 / virtual DOM  (0) 2024.08.01
리액트 - 참조형 state  (0) 2024.08.01
리액트 - children prop  (0) 2024.07.31
리액트 - 실습 리뷰  (0) 2024.07.30
리액트 - Props  (0) 2024.07.30