250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- react
- function
- CSS
- const
- Number
- ES6
- VUE
- let
- null
- BIND
- 컴포넌트
- 자바스크립트
- var
- 모던
- typescript
- 객체
- 스코프
- 데이터 타입
- redux
- 라우터
- 함수
- this
- Interface
- todolist
- js
- 타입스크립트
- 투두리스트
- 뷰
- 모던 자바스크립트
- 리액트
Archives
- Today
- Total
홍준혁
React-TypeScript (UseReducer 톺아보기) 본문
728x90
reducer 코드를 보면서 이해해 보는 시간을 가져보도록 하자
import React, { useReducer } from "react";
type Color = "red" | "orange" | "yellow";
type State = {
count: number;
text: string;
color: Color;
isGood: boolean;
};
type Action =
| { type: "SET_COUNT"; count: number }
| { type: "SET_TEXT"; text: string }
| { type: "SET_COLOR"; color: Color }
| { type: "TOGGLE_GOOD" };
function reducer(state: State, action: Action): State {
switch (action.type) {
case "SET_COUNT":
return {
...state,
count: action.count,
};
case "SET_TEXT":
return {
...state,
text: action.text,
};
case "SET_COLOR":
return {
...state,
color: action.color,
};
case "TOGGLE_GOOD":
return {
...state,
isGood: !state.isGood,
};
default:
throw new Error("Unhandled Error");
}
}
function ReducerSample() {
const [state, dispatch] = useReducer(reducer, {
count: 0,
text: "Hello",
color: "red",
isGood: true,
});
const setCount = () =>
dispatch({
type: "SET_COUNT",
count: 5,
});
const setText = () =>
dispatch({
type: "SET_TEXT",
text: "bye",
});
const setColor = () =>
dispatch({
type: "SET_COLOR",
color: "orange",
});
const toggleGood = () => {
dispatch({
type: "TOGGLE_GOOD",
});
};
return (
<div>
<p>
<code>count: </code> {state.count}
</p>
<p>
<code>text: </code> {state.text}
</p>
<p>
<code>color: </code> {state.color}
</p>
<p>
<code>isGood: </code> {state.isGood ? "true" : "false"}
</p>
<button onClick={setCount}>SET_COUNT</button>
<button onClick={setText}>SET_TEXT</button>
<button onClick={setColor}>SET_COLOR</button>
<button onClick={toggleGood}>TOGGLE_GOOD</button>
</div>
);
}
export default ReducerSample;
간단히 작성해본 리액트 코드이다. Type들을 작성해줘서 프로그래머 입장에서 사용하기 편하게 작업해주었다.
Color 타입을 설정해 줌으로써 red , orange , yellow만 받을 수 있게 설정해 주었다.
State 타입을 설정해 줌으로써 count , text , color , isGood의 state를 관리할 수 있게 설정해 주었다.
Action 타입을 설정해 주었다. 각 액션 타입에 기능을 할 수 있게 하였다.
스위치 문을 돌리면서 각 액션 타입에 맞는 기능을 구현하였다
다음은 버튼 이벤트가 있을 때 실행할 함수들이다.
JSX부분은 이렇게 작성해 주었다
난 아직도 리듀서를 사용하는 게 헷갈린다... 하지만 리듀서는 상태 관리하는데 중요하기 때문에
익혀두는 것이 좋겠다.
728x90
'React.js' 카테고리의 다른 글
React-Query로 무한스크롤 구현하기 (0) | 2022.06.15 |
---|---|
토큰 기반 인증, 효율적으로 관리하는 법 (1) | 2022.05.25 |
새로나온 React 18 빠르게 살펴보기. (0) | 2022.01.24 |
리액트 프로젝트 휴대폰 , 타블렛에서 확인하는 법 (4) | 2021.01.30 |
리액트 X 타입스크립트 사용해보기. (0) | 2021.01.22 |
Comments