React.js

Redux (4) - state가 object/array일 경우 변경하는 법

우영11 2023. 11. 14. 18:45

1. 전체 바꿔끼우기

let user = createSlice({
    name : 'user',
    initialState : {name : 'kim', age : 20},
    reducers : {
        changeName(state){
            return {name : 'park', age : 20}
        }
    }
})

- 비효율적!!

 

 

2. 직접수정 (가능) - Immer.js라이브러리가 state 사본을 하나 더 생성해준 덕분

let user = createSlice({
    name : 'user',
    initialState : {name : 'kim', age : 20},
    reducers : {
        changeName(state){
            state.name = 'park'
        }
    }
})

 

 

state 변경함수가 여러개 필요하면

( +1하는 것도 좋지만 +10 하는 버튼이 필요할 때)

changeName(10)
changeName(100)
let user = createSlice({
    name : 'user',
    initialState : {name : 'kim', age : 20},
    reducers : {
        changeName(state, action){
            state.age += action.payload
        }
    }
})

state 두 번째 파라미터(action)가 함수 사용시 입력한 것을 가져와서  action.payload를 통해 불러온다!