반응형
SMALL
useReducer
- 복잡한 정적 로직을 만드는 경우 사용.
- 다음 state기 이전 state에 의존적인 경우에 사용.
- Redux를 알면 쉽게 사용할 수 있음.
import { useReducer } from 'react';
const reducer = (state, action) => {
if (action.type === 'PLUS') {
return {
count: state.count + 1
};
}
return state;
}
function ExReducer() {
const [state, dispatch] = useReducer(reducer, {count: 0}); // 첫번째 인자로 함수가 들어감.
return (
<div>
<p>{state.count}</p>
<button onClick={click}>ClickButton!</button>
</div>
);
function click() {
dispatch({type: 'PLUS'});
}
}
reducer
- state를 변경하는 로직이 담겨있는 함수.
- const reducer = ( state, action ) => { return newState; }
- state는 이전 state, action은 state를 바꾸려는 객체.
- action은 객체이고 type을 필수 프로퍼티로 가짐.
dispatch
- action 객체를 넣어서 실행.
useMemo
특정 결괏값을 재사용하고 싶을 때 사용한다.
import { useState, useMemo } from 'react';
function sum(persons) {
return persons.map(person => person.age).reduce((l, r) => l + r, 0 );
}
function ExMemo() {
const [value, setValue] = useState('');
const [persons] = useState([
{name: 'James', age: 10},
{name: 'Mike', age: 40},
]);
const count = useMemo(() => {
return sum(persons);
}, [persons]);
return (
<div>
<input value={} onChange={change} />
<p>{count}</p>
<button onClick={click}>CLICK!</button>
</div>
);
function change(e) {
setValue(e.target.value);
}
}
useRef
import { useState, useRef, createRef } from 'react';
function ExRef() {
const [value, setValue] = useState('');
const input1Ref = createRef();
const input2Ref = useRef();
console.log(input1Ref.current, input2Ref.current);
// null undefined
// null <input>
return (
<div>
<input value={} onChange={change} />
<input ref={input1Ref} />
<input ref={input2Ref} />
</div>
);
function change(e) {
setValue(e.target.value);
}
}
createRef는 랜더 될 때마다 레퍼런스를 새로 만든다.
useRef는 최초에만 undefined이고, 랜더 되어도 같은 레퍼런스를 유지한다.
반응형
'프론트개발 > React' 카테고리의 다른 글
[Next.js] next.js 알아보기 (0) | 2022.07.30 |
---|---|
[React] Context API (0) | 2022.07.26 |
[React] 기본 Hooks (0) | 2022.07.25 |
[React] 라이프사이클(Lifecycle) (0) | 2022.07.25 |
[React] Props와 State (0) | 2022.07.21 |
댓글