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 훅의 반환값은 상태값과 상태값을 업데이트하는 세터 함수입니다.
'언어 및 도구들 공부 > React' 카테고리의 다른 글
React에서 useRef을 쓰게 된 경위 (0) | 2024.11.27 |
---|---|
상태값이 갱신되면 리렌더링 되는 함수형 컴포넌트 (1) | 2024.11.26 |
useReducer 훅과, 거기로 불려갈 콜백함수의 파라미터 action, state (0) | 2024.11.26 |
HTML - value VS JSX - defaultValue (0) | 2024.11.25 |
상태변수와 onChange 이벤트 핸들러조합으로만 써야 하는 경우. (0) | 2024.11.25 |