Develop/React

(React & Express 를 이용한 웹 어플리케이션 개발하기) 7일차 - state 배열 처리 (immutability Helper)

자라선 2021. 1. 22. 01:03

www.inflearn.com/course/react-%EA%B0%95%EC%A2%8C-velopert/lecture/4151?tab=curriculum

 

React & Express 를 이용한 웹 어플리케이션 개발하기 - 인프런

Velopert 님이 알려주는 ReactJS 강좌 입니다. 최근 각광받는 Javascript 라이브러리인 React 를 소개하고, 사용법을 알려주는 강좌 입니다. 초급 웹 개발 프레임워크 및 라이브러리 Front-End React 온라인 강

www.inflearn.com


// 모듈을 설치
npm install --save react-addons-update

// 프로젝트에서 사용하기 위해 import
import update from 'react-addons-update'

배열이나 객체의 state를 보다 편하게 변경, 수정, 추가, 삭제 하기위하여 사용하는 모듈

페이스북에서 자체개발하며 사용하기 편하다.

 

import React from 'react';
import update from 'react-addons-update';

class App extends React.Component{

    constructor(props){
        super(props);
        this.state = {
            number: 0,
            str: 'str',
            array: [1, 2, 3, 4, 5],
            list: {
                content: '',
                title: ''
            }
        }

        this.addNumber = this.addNumber.bind(this);
        this.removeNumber = this.removeNumber.bind(this);
        this.applyValue = this.applyValue.bind(this);
    }

    // immutability Helper로 배열 원소 추가
    addNumber(e){
        this.setState({
            number: this.state.number+1,
            array: update(
                this.state.array,
                {
                    $push: [this.state.number]
                }
            )
        });
    }

    // immutability Helper로 배열 원소 제거
    removeNumber(e){
        this.setState({
            array: update(
                this.state.array,
                {
                    $splice: [[0, 1]]
                }
            )
        })
    }

    // input에 이벤트가 걸려오면 state의 value를 이 메소드에서 변경하도록함
    applyValue(e){
        this.setState({
            list: update(
                this.state.list,
                {
                    [e.target.name]:{$set: e.target.value}
                }
            )
        })
    }

    render(){
        return (
            <div>
                <button onClick={this.addNumber}>배열 추가</button>
                &nbsp;
                <button onClick={this.removeNumber}>배열 제거</button>
                &nbsp;
                title: <input id='title' name='title' value={this.state.list.title} onChange={this.applyValue}/>
                &nbsp;
                content: <input id='content' name='content' value={this.state.list.content} onChange={this.applyValue}/>
                <br/>
                <p>{this.state.number}</p>
                <br/>
                {this.state.array}
                <br/>
                title: {this.state.list.title}
                <br/>
                content: {this.state.list.content}
            </div>
        );
    }
}

export default App;

사용법은 간단하게 this.setState객체에서 변경할 배열이나 객체를 지정하여 update로 사용한다.

$push를 사용하여 추가할 값을 지정하거나

$splice를 사용하여 원소값을 제거

$set를 사용하여 특정 객체의 원소의 값을 변경할 수 있다.