언어 및 도구들 공부/React

useReducer 훅 시그니처?

Dr.Mlem 2024. 11. 26. 16:52


St2veK: useReducer(setCounterValue, 0);
이렇듯,
useReducer는 첫번째 파라미터로 무조건 콜백함수를 필요로 하는거야?

 

 


GitHub Copilot: 네, 

useReducer 훅은 첫 번째 파라미터로 반드시 리듀서 함수(콜백 함수)를 필요로 합니다. 이 리듀서 함수는 현재 상태와 액션을 받아서 새로운 상태를 반환하는 함수입니다.

 

useReducer의 시그니처는 다음과 같습니다:

const [state, dispatch] = useReducer(reducer, initialState);


여기서 `reducer`는 첫 번째 파라미터로 전달되는 리듀서 함수입니다. 이 함수는 두 개의 파라미터를 받습니다:
1. `state`: 현재 상태
2. `action`: 상태를 변경하기 위한 액션

예제 코드:

function setCounterValue(state, action) {
  switch(action) {
    case 'HELLO':
      return state + 1;
    case 'WORLD':
      return state - 1;
    default:
      return state;
  }
}

const [count, dispatch] = useReducer(setCounterValue, 0);


따라서 useReducer는 첫 번째 파라미터로 반드시 리듀서 함수를 필요로 합니다.

 

 


St2veK: 그리고 2번째 파라미터는 반드시 어떤 상태값이 쓸 초기값을 주는거고?

 

 


GitHub Copilot: 네, 맞습니다. 

useReducer 훅의 두 번째 파라미터는 반드시 초기 상태값을 전달해야 합니다. 이 초기 상태값은 리듀서 함수가 처음 호출될 때 사용됩니다.


useReducer의 시그니처는 다음과 같습니다:

const [state, dispatch] = useReducer(reducer, initialState);


여기서 `initialState`는 두 번째 파라미터로 전달되는 초기 상태값입니다. 이 값은 리듀서 함수가 처음 호출될 때 `state`로 사용됩니다.

예제 코드:

function setCounterValue(state, action) {
  switch(action) {
    case 'HELLO':
      return state + 1;
    case 'WORLD':
      return state - 1;
    default:
      return state;
  }
}

const [count, dispatch] = useReducer(setCounterValue, 0);


이 예제에서 `0`이 초기 상태값으로 사용됩니다. 

useReducer 훅은 컴포넌트가 처음 렌더링될 때 setCounterValue 리듀서 함수에 `0`을 `state`로 전달합니다.

 

 


St2veK: 저 예제 코드에서 dispatch는 count 상태값에 값을 설정해주는 일종의 세터 함수같은 것이고?

 

 

GitHub Copilot: 네, 맞습니다. `dispatch` 함수는 useReducer 훅에서 반환되는 함수로, 상태를 업데이트하기 위해 액션을 리듀서 함수에 전달하는 역할을 합니다. 일종의 세터 함수와 같은 역할을 합니다.

다음은 예제 코드입니다:

const [count, dispatch] = useReducer(setCounterValue, 0);


여기서 `dispatch` 함수는 setCounterValue 리듀서 함수에 액션을 전달하여 상태를 업데이트합니다. 예를 들어, 다음과 같이 사용할 수 있습니다:

<button onClick={() => dispatch({ type: 'HELLO' })}>Increment</button>
<button onClick={() => dispatch({ type: 'WORLD' })}>Decrement</button>


이 예제에서 `dispatch` 함수는 setCounterValue 리듀서 함수에 `{ type: 'HELLO' }` 또는 `{ type: 'WORLD' }` 액션을 전달하여 `count` 상태값을 업데이트합니다.

 

 


St2veK: 그럼 결국, useReducer 훅의 파라미터 꼴은, (리듀서 함수로 쓰일 콜백함수, 리듀서 훅의 영향을 받을 어떤 상태값의 초기값) 모양이 되겠네?

 

 


GitHub Copilot: 네, 맞습니다. 

 

useReducer 훅의 파라미터는 다음과 같은 형태를 가집니다:

useReducer(reducer, initialState);


여기서:
1. `reducer`: 리듀서 함수로 사용될 콜백 함수. 이 함수는 현재 상태(`state`)와 액션(`action`)을 받아 새로운 상태를 반환합니다.
2. `initialState`: 리듀서 훅의 영향을 받을 상태값의 초기값.

예제 코드:

function setCounterValue(state, action) {
  switch(action) {
    case 'HELLO':
      return state + 1;
    case 'WORLD':
      return state - 1;
    default:
      return state;
  }
}

const [count, dispatch] = useReducer(setCounterValue, 0);


이 예제에서 useReducer 훅은 setCounterValue 리듀서 함수와 초기 상태값 `0`을 파라미터로 받습니다. `dispatch` 함수는 상태를 업데이트하기 위해 액션을 리듀서 함수에 전달합니다.

 

 


St2veK: 그리고 그걸 받는 것은, 어떤 상태값과 상태값에 대한 세터함수인 것이고?

 

 


GitHub Copilot: 네, 맞습니다. 

useReducer 훅을 호출하면 두 가지 값을 반환합니다: 현재 상태값과 상태값을 업데이트하는 `dispatch` 함수입니다. 이 두 값을 배열 형태로 반환하며, 구조 분해 할당을 통해 각각의 변수에 할당할 수 있습니다.

예제 코드:

const [state, dispatch] = useReducer(setCounterValue, 0);


여기서:
- `state`는 현재 상태값입니다. 이 예제에서는 초기값이 `0`입니다.
- `dispatch`는 상태를 업데이트하기 위한 함수입니다. 이 함수는 액션을 리듀서 함수에 전달하여 상태를 업데이트합니다.

따라서 useReducer 훅의 반환값은 상태값과 상태값을 업데이트하는 세터 함수입니다.