728x90
반응형
SMALL
매니저님이 개인적으로 내주신 숙제 두가지를 했다.
useRef는 언제 쓰는지, 리액트 툴킷의 장점을 찾아보았다.
useRef
useRef를 쓰면 안되고, 이 경우에는 let으로 선언을 해줘야한다!! useRef로 관리하는 값은 바뀌어도 컴포넌트가 리렌더링이 되지 않는 특징 때문에 이렇게 변수를 선언하면 다음 리렌더링 될 때 그 변수 값은 초기화된다.
// id 값 오류 해결
**let nextId = 0;**
const Form = () => {
const [title, setTitle] = useState('');
const [content, setContent] = useState('');
const dispatch = useDispatch();
const handleInputTitle = (e) => {
setTitle(e.target.value);
};
const handleInputContent = (e) => {
setContent(e.target.value);
};
**// const nextId = useRef(0);**
const onSubmitHandler = (e) => {
e.preventDefault();
if (title.trim() === '' && content.trim() === '') {
alert(`제목과 내용을 모두 입력하세요.`);
} else if (title.trim() === '') {
alert(`제목을 입력하세요.`);
} else if (content.trim() === '') {
alert(`내용을 입력하세요.`);
} else if (title.trim() !== '' && content.trim() !== '') {
dispatch(
addTodo({
**id: nextId += 1,**
title: title,
content: content,
isDone: false,
})
);
setTitle('');
setContent('');
}
};
return (
<StFormContainer onSubmit={onSubmitHandler}>
<StFormlabel>제목</StFormlabel>
<StInput
type='text'
value={title}
name='title'
onChange={handleInputTitle}
/>
<StFormlabel>내용</StFormlabel>
<StInput
type='text'
value={content}
name='content'
onChange={handleInputContent}
/>
<StButton>추가하기</StButton>
</StFormContainer>
);
};
툴킷의 장단점
- 리덕스 툴킷 라이브러리는 리덕스팀의 세가지 걱정을 해결하기 위해 등장하였다.
- 리덕스 스토어를 구성하는 것은 너무 복잡하다.
- 리덕스가 유용해지려면 많은 패키지들을 추가로 설치해야한다.
- 리덕스는 너무 많은 보일러플레이트 코드를 요구한다.
- 리덕스 툴킷 api는 크게 7가지가 있다.
- configureStore() : 리덕스 createStore함수와 비슷한 함수로, 간단화된 구성 옵션과, 기본 구성을 제공한다. slice reducer를 자동으로 합치고, 미들웨어를 추가할 수 있으며, redux-thunk를 기본적으로 제공한다. 또한 redux devtools Extension 사용이 가능하다.
- createReducer() : 리듀서 함수를 switch 구문으로 쓰기보다는, 리듀서 함수를 계속쓰는 lookup table 방식을 쓸 수 있게 해주고, immer라이브러리가 내장되어 있어서 mutative한 코드를 작성할 수 있도록 해준다. ex) state.todos[3].completed = true
- createAction() : 주어진 액션 타입 문자열로 액션 크리에이터 함수를 생성해준다. 함수 자체에 toString()이 정의되어 있어서 constant 타입 대신 사용이 가능하다.
- createSlice() : reducer 함수, slice 이름, 초깃값을 넣을 수 있고 action creator와 action type을 가진 slice reducer를 자동으로 생성해준다.
- createAsyncThunk : redux-thunk의 대체재
- createEntityAdapter : 스토어에서 정규화된 데이터를 관리하기 위해 재사용 가능한 리듀서 및 selector 집합을 생성한다.
- createSelector : reselect 라이브러리의 유틸리티 기능과 똑같음
- 장점
- action type이나 action creator를 따로 생성해주지 않아도 된다.
- 미들웨어 추가가 편리하다.
- immer가 내장되어 있어 mutable 객체를 사용해도 된다.
- redux thunk가 내장되어 있어 비동기를 지원한다.
- 타입스크립트 지원이 잘된다.
<출처>
https://kyun2da.dev/라이브러리/리덕스-툴킷/
http://blog.hwahae.co.kr/all/tech/tech-tech/6946/
[React] useRef() 는 언제 사용하는가? (tistory.com)
728x90
반응형
LIST
'TIL & WIL & 회고록 > TIL' 카테고리의 다른 글
2022.08.06 / 리액트 Todolist 뷰 만들기 (0) | 2022.08.07 |
---|---|
2022.08.05 / 리액트 주특기 심화주차 시작 (0) | 2022.08.06 |
2022.08.03 / 리액트 Todolist 프로젝트 추가 내용 (0) | 2022.08.04 |
2022.08.02 / 리액트 Todolist 완성 (0) | 2022.08.02 |
2022.08.01 / 리액트 Redux로 Todolist 만들기 (0) | 2022.08.02 |