일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- nextjs
- 결제페이지
- react-query v5
- JS변수
- Next.js
- react-query
- React
- react-query 도입후기
- 사내 이슈
- node.js
- 더블엔씨
- ClientSide
- React.JS
- 사내 오류 대응
- 캡스톤디자인 후기
- 리액트
- 사내 오류 해결
- no router instance found
- TypeScript
- 일상 생각
- 기술낙서장
- router instance
- SW캡스톤디자인
- SSR
- state 사용하기
- state 관리
- javascript
- react-query&Next.js
- 기술 낙서장
- MSW
- Today
- Total
코딩을 잘하고 싶은 코린이 동토니
{React} Hooks 본문
hooks는 기존 함수형 컴포넌트에서 할수 없었던 다양한 작업을 할 수 있게 도와준다.
1.useState = 상태 관리에 사용
*import* React, { useState } *from* "react";
const Counter = () => {
const [number, setNumber] = useState(0);
*return* (
<div>
<p>
현재 카운터 값은 <b>{number}</b>입니다.{" "}
</p>
<button *onClick*={() => setNumber(number + 1)}>+1</button>
<button *onClick*={() => setNumber(number - 1)}>-1</button>
</div>
);
};
*export* *default* Counter;
useState 파라미터에는 상태의 기본값을 정해준다
위의 경우 0
이 함수가 호출 되면 배열을 반환을 해주고 배열의 첫번째 원소는 상태 값 두번째 원소는 상태를 설정하는 함수를 반환한다.
2. UseEffect
클래스형 컴포넌트의 componentDidMount 와 ComponentDidUpdate를 합친 형태
즉 컴포넌트가 렌더링 될때마다 특정 작업을 수행하도록 설정해준다.
userEffect는 기본적으로 렌더링 된 직후마다 실행되며 두번재 파라미터에 따라 실행 조건이 달라진다.
만약 컴포넌트가 언마운트 되거나 실행직전에 무언가 설정을 해주고 싶다면 항상 cleanup함수를 반환해주어야 한다.
3.UseReducer
useState보다 더 다양한 컴포넌트 상황에 따라 다양한 상태를 다른 값으로 업데이트 할 때 사용한다.
리듀서는 현재 상태 그리고 업데이트를 위해 필요한 action값을 전달받아 새로운 상태를 반환한다.
function reducer(state,action){
return {};
}
*useReducer를 이용한 counter 구현
*import* React, { useReducer } *from* "react";
function reducer(state, action) {
*switch* (action.type) {
*case* "INCREMENT":
*return* { value: state.value + 1 };
*case* "DECREMENT":
*return* { value: state.value - 1 };
*default*:
*return* state;
}
}
const CounterHook = () => {
const [state, dispatch] = useReducer(reducer, { value: 0 });
*return* (
<div>
<p>
현재 카운터 값은 <b>{state.value}</b>입니다.{" "}
</p>
<button *onClick*={() => dispatch({ type: "INCREMENT" })}>-1</button>
<button *onClick*={() => dispatch({ type: "DECREMENT" })}>+1</button>
</div>
);
};
*export* *default* CounterHook;
useReducer의 첫번째 파라미터로는 리듀서 함수, 두번째에는 해당 리듀서의 기본값을 넣어준다.
이 hook을 사용시 state값과 dispatch 함수를 받아오고
state : 현재 상태 값
dispatch : 액션을 발생시키는 함수 를 넣어준다
4. UseMemo
함수형 컴포넌트 내부에서 발생하는 연산을 최적화가 가능하다
렌더링 과정에서 특정 갑싱 바뀌었을 때만 연산을 실행하고 원하느느 값이 안바뀌면 이전에 연산한 결과를 다시 사용하는 방식
*import* React, { useMemo, useState } *from* "react";
const getAverage = (numbers) => {
console.log("평균값 계산중...");
*if* (numbers.length === 0) *return* 0;
const sum = numbers.reduce((a, b) => a + b);
*return* sum / numbers.length;
};
const Average = () => {
const [list, setList] = useState([]);
const [number, setNumber] = useState("");
const onChange = (e) => {
setNumber(e.target.value);
};
const onInsert = () => {
const nextList = list.concat(parseInt(number));
setList(nextList);
setNumber("");
};
const avg = useMemo(() => getAverage(list), [list]);
*return* (
<div>
<input *value*={number} *onChange*={onChange} />
<button *onClick*={onInsert}>등록</button>
<ul>
{list.map((value, index) => (
<li *key*={index}>{value}</li>
))}
</ul>
<div>
<b>평균값:</b> {avg}
</div>
</div>
);
};
*export* *default* Average;
UseCallback
useMemo와 비슷한 함수
주로 렌더링 성능을 최적화 해야할 때 사용한다.
이 hook을 사용하면 이벤트 헨들러 함수를 필요할 때만 생성가능하다
const onChange = useCallback(e => {
setNumber(e.target.value);
},[]) //컴포넌트가 처음 렌더링 될때만 함수 생성
const onInsert = useCallback(() => {
const nextList = list.concat(parseInt(number));
setList(nextList);
setNumber("");
}, [number, list]); //number와 list가 바뀔때만 함수 생성
useCallback은 첫번째 파라미터에는 생성하고 싶은 함수 두번재 파라미터에는 배열을 넣는다
이때 배열에는 생성 조건을 명시해준다.
'Web > React.js' 카테고리의 다른 글
React-Query 리액트 쿼리 도입 및 후기 (1) (0) | 2022.07.24 |
---|---|
State 관리 (0) | 2021.10.06 |
Props (0) | 2021.09.29 |
Class형 컴포넌트와 함수형 컴포넌트 (0) | 2021.09.28 |
리액트 컴포넌트 {React Component} (0) | 2021.03.10 |