티스토리 뷰
로딩 스피너 컴포넌트를 만들 때 고려할 점, 가능한 방법을 생각해 보았다.
이중 제출 방지
submit 버튼을 두 번 눌러 요청을 중복하는 걸 방지해야 한다.
div를 늘려 오버레이하는 게 가장 간단해 보인다.
더 철저하게 하자면 axios 사용 층에서 배타적으로 요청하는 유틸리티를 추가할 수 있을 듯하다.
서버도 결국엔 CSRF 토큰을 사용하게 될 텐데 이것도 이중 제출 문제를 완화할 수 있을 것으로 보임.
재활용 방법 비교
MobX
현재 사용 중이고 간단함
단점을 들자면 라이브러리 의존성
@inject('applicationStore')
@observer
class SubmitForm extends React.Component {
showLoading() {
this.props.applicationStore.showLoader = true;
}
render() {
return <div />;
}
}
컨텍스트
PureComponent로 만들 수 있다는 장점
하지만 일관성이 떨어짐(MobX에서 상태를 한눈에 알기 힘듦)
class SubmitForm extends React.PureComponent {
render() {
return (<React.Fragment>
<Loader.Consumer>
{showLoader => this.state.loading && showLoader(true)}
</Loader.Consumer>
</React.Fragment>);
}
}
HOC
컨텍스트보다 덜 번잡함
props 이름이 충돌할 수 있고 조립한 컴포넌트 이름 고민 필요
class SubmitForm extends React.PureComponent {
submitData() {
this.props.showLoader(true);
await request();
}
render() {
return <div />;
}
}
const Submit = withLoader(SubmitForm);
export { Submit as SubmitForm };
Hooks
리액트의 새로운 바람(...)
클래스에서 못 씀.
function SubmitForm() {
const showLoader = useLoader();
const onSubmit = useCallback(() => {
showLoader(true);
}, [showLoader]);
return (<div>
<button onClick={onSubmit}>load</button>
</div>);
}
'지식저장소 > 개발' 카테고리의 다른 글
'React Hook의 어두운면'을 읽고 (0) | 2020.11.06 |
---|---|
Mocking is a Code Smell을 읽고 (0) | 2020.03.22 |
React Hooks를 사용할 이유 (6) | 2019.06.19 |
깃 3-way merge IntelliJ 설정 (0) | 2019.03.19 |
WPF ListBoxItem에 Border 지정하기 (0) | 2019.02.26 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- V3 Lite
- Authentication
- getch()
- Kotlin
- intellisense
- Qt5
- Deemo
- software compraison
- JWT
- WSL
- MSVC
- novel review
- React
- MSVC2013
- Notion
- Code Snippet
- Haskell
- CLion
- game design
- C++11
- Windows Defender
- IntelliJ
- SHAREX
- coroutine
- C/C++
- MSVC 2017 RC
- Rust
- gram
- error highlighting
- hooks
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함