리액트를 공부하다가 useState를 객체 단위로 관리해서 사용할 때 아주 중요하고 유용하다는 걸 깨달았다. 

그래서 이 스프레드 연산자에 대한 이해가 좀 필요할 거 같다.

 

수많은 방법들의 응용이 있겠지만 나는 간단하게 이게 리액트에서 왜 중요한지 좀 보고자 한다.

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
    </head>
    <body></body>
    <script>
        const test = {
            name: 'jay',
            age: 27,
            job: {title: 'developer', level: 'junior'},
        };

        let practice = {...test, age: 33};
        console.log(test);
        console.log(practice);
    </script>
</html>

 

스프레드 연산자는 배열도 가능하고 객체도 가능하다. 나는 객체로 연습을 해봤다.

스프레드 연산자는 { ...test }를 하면 변수에 이 test의 값이 펼쳐져서 복사가 된다. 

뒤에 쉼표(,)를 붙이고 값이 넣으면 해당 값이 덮어 씌여져서 복사가 된다. 

 

이게 그렇다면 왜 리액트에서 중요한가?

 

import React from 'react';
import {useState} from 'react';

export default function AppPractice() {
    const [practice, setPractice] = useState({
        name: 'jay',
        age: 27,
        job: {title: 'developer', level: 'junior'},
    });
    return (
        <div>
            <h1>이름 : {practice.name}</h1>
            <h1>나이 : {practice.age}</h1>
            <h1>직업 : {practice.job.title}</h1>
            <h1>레벨 : {practice.job.level}</h1>

            <button
                onClick={() => {
                    const name = prompt('이름을 입력해주세요');
                    setPractice(prev => ({
                        ...prev,
                        name: name,
                    }));
                }}
            >
                이름변경
            </button>
        </div>
    );
}

 

리액트에서 객체 단위로 상태를 관리할 때 이 스프레드 연산자가 없으면 진행하기 힘들 정도로 중요하다고 생각한다.

이전 객체의 값을 나열해서 값을 덮어 씌워서 상태를 업데이트 해야기 때문에 스프레드 연산자는 매우 중요하며 객체 안의 객체의 상태도 업데이트 할 때 매우 유용하며 필수적이다.

 

import React from 'react';
import {useState} from 'react';

export default function AppPractice() {
    const [practice, setPractice] = useState({
        name: 'jay',
        age: 27,
        job: {title: 'developer', level: 'junior'},
    });
    return (
        <div>
            <h1>이름 : {practice.name}</h1>
            <h1>나이 : {practice.age}</h1>
            <h1>직업 : {practice.job.title}</h1>
            <h1>레벨 : {practice.job.level}</h1>

            <button
                onClick={() => {
                    const name = prompt('이름을 입력해주세요');
                    setPractice(prev => ({
                        ...prev,
                        name: name,
                    }));
                }}
            >
                이름변경
            </button>
            <button
                onClick={() => {
                    const level = prompt('레벨을 입력해주세요');
                    setPractice(prev => ({
                        ...prev,
                        job: {...practice.job, level: level},
                    }));
                }}
            >
                레벨변경
            </button>
        </div>
    );
}

+ Recent posts