useReducer를 사용할 때 작업을 단순화하기 위해 패키지를 만듭니다.
12108 단어 opensourcejavascriptpackagereact
useReducer
를 사용하여 복잡한 상태를 처리하는 것이 useState
를 사용하는 것보다 바람직합니다. 그러나 리듀서를 작성하는 것은 처리할 작업을 결정하기 위해 너무 많은switch/case
작성해야 할 수 있기 때문에 다소 성가신 일입니다. 또한 액션을 직접 작성하는 대신 액션 생성자를 작성하여 액션을 생성하는 것을 선호할 수 있습니다.이러한 문제를 해결하기 위해 작업을 단순화하기 위해 use-case-reducers이라는 패키지를 작성합니다.
이 패키지의 특징
객체를 사용하여 리듀서 생성
리듀서 함수를 작성하는 대신 유스 케이스 리듀서는 케이스 리듀서를 포함하는 객체를 사용하여 리듀서를 생성합니다. 케이스 리듀서는 하나의 케이스만 처리하는 함수입니다. 예를 들어
increment
및 add
두 가지 작업으로 카운터 상태를 처리하려는 경우 개체는 다음과 같습니다.const caseReducers = {
increment: state => ({count: state + 1}),
add: (state, amount) => ({count: state + amount}),
}
액션 크리에이터 자동 생성
use-case-reducers는 전달한 케이스 리듀서에 해당하는 모든 작업 생성자를 생성합니다. 예를 들어 위의
caseReducers
를 사용하면 두 개의 작업 생성자increment()
및 add(amount)
가 생성됩니다.케이스 리듀서에서 상태 변경 허용
이 패키지는 생성된 리듀서에서 immer를 사용하므로 케이스 리듀서 내부의 상태를 변경할 수 있습니다. 위의
caseReducers
를 다음과 같이 다시 작성할 수 있습니다.const caseReducers = {
increment: state => {state.count += 1},
add: (state, amount) => {state.count += amount},
}
이 기능은 상태가 매우 복잡할 때 유용할 수 있습니다.
이 패키지를 사용하는 방법
npm
또는 yarn
를 사용하여 종속 항목으로 설치합니다.npm install use-case-reducers
#or
yarn add use-case-reducers
카운터 상태가 있는 구성 요소를 작성하고 이 패키지를 사용하여 업데이트할 것입니다.
import useCaseReducers from 'use-case-reducers'
const initialState = {count: 0};
const caseReducers = {
increment: (state) => {state.count += 1},
add: (state, amount) => {state.count += amount},
};
const Counter = () => {
const [state, dispatch, {increment, add}] = useCaseReducers(caseReducers, initialState);
return (
<div>
count: {state.count}
<button onClick={() => dispatch(increment())}>increment</button>
<button onClick={() => dispatch(add(10))}>add 10</button>
</div>
)
}
동일한 구성 요소를 살펴보고
useReducer
로 작성해 보겠습니다.import {useReducer} from 'react'
const initialState = {count: 0};
const reducer = (state, action) => {
switch(action.type) {
'increment': {
return {count: state.count + 1};
}
'add': {
return {count: state.count + action.payload};
}
}
}
const increment = () => ({type: 'increment'});
const add = (amount) => ({type: 'add', payload: amount});
const Counter = () => {
const [state, dispatch] = useReducer(reducer, initialState);
return (
<div>
count: {state.count}
<button onClick={() => dispatch(increment())}>increment</button>
<button onClick={() => dispatch(add(10))}>add 10</button>
</div>
)
}
보시다시피
use-case-reducers
로 더 적은 코드를 작성할 수 있습니다. 이 패키지가 도움이 되기를 바랍니다. 좋은 하루 보내세요!
Reference
이 문제에 관하여(useReducer를 사용할 때 작업을 단순화하기 위해 패키지를 만듭니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jason89521/i-create-a-package-to-simplify-the-work-when-using-usereducer-nb8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)