728x90
Redux-Toolkit?
아래의 요구사항을 해결하기위한 패키지이다. 리덕스의 불편사항을 어느정도 해결해준다.
- 너무 많은 보일러플레이트 코드
- 복잡한 리덕스 store설정
- 다른 유용한 패키지를 추가하고 싶다
createAction()
Redux의 action type을 정의하는 생성자 함수임.
import { createAction } from '@reduxjs/toolkit'
const increment = createAction<number | undefined>('counter/increment')
let action = increment(); // { type: 'counter/increment' }
action = increment(3) // return { type: 'counter/increment', payload: 3 }
console.log(increment.toString()) // 'counter/increment'
문서: https://redux-toolkit.js.org/api/createAction
createReducer()
Redux reducer 함수를 만든다.
action이 전달(dispatched)됐을 때, 상태를 업데이트해주는 reducer 함수와 구체적인 action types를 매핑해준다.
switch와 case문 없이도, 매핑해준다!
문서: https://redux-toolkit.js.org/api/createReducer
createReducer() API와 함께 사용하기
createReducer(actionCreator, reducer)
- actionCreator : createAction으로 생성한 액션 생성자
- reducer: 리듀서 함수
import {createAction, createReducer } from '@reduxjs/toolkit'
const increment = createAction<number>('counter/increment')
const decrement = createAction<number>('counter/decrement')
const counterReducer = createReducer(0, (builder) => {
builder
.addCase(increment, (state, action) => state + action.payload)
.addCase(decrement, (state, action) => state - action.payload)
})
Builder Callback Notation 사용
import { createAxtion, createReducer } from '@reduxjs/toolkit'
interface CounterState {
value: number
}
const increment = createAction('Counter/increment')
const decrement = createAction('Counter/decrement')
counst incrementByAmount = createAction<number>('Counter/incrementByAmount')
const initialState = { value: 0 } as CounterState
const counterReducer = createReducer(initialState, (builder) => {
builder.addCase(increment.type, (state, action) => state.value++)
.addCase(decrement.type, (state, action) => state.value--)
.addCase(incrementByAmount.type, (state, action) => state.value += action.payload)
})
builder.addMatcher?
파라미터
- matcher: 타입스크립트에 matcher 함수. type predicate 함수여야만 한다
- reducer: 리듀스함수
builder.addDefaultCase?
기본 실행.
PayloadAction
PayloadAction은 액션의 payload 필드의 타입을 지정할 수 있게 해주는 제네릭이다.
728x90
'라이브러리 도구' 카테고리의 다른 글
[Formik] 리액트 폼 라이브러리 (0) | 2022.11.13 |
---|---|
[Redux] useSelector useDispatch 훅 정의 (0) | 2022.11.11 |
[firebase storage] javascript 사용법(최신버전) (0) | 2022.07.13 |
[fireStore] 최신 버전편. document field 업데이트하기. React 적용 (0) | 2022.07.06 |
[vue-advance-cropper] cropper를 이미지 전체로 적용하기 (0) | 2022.07.05 |
댓글