HOOK
클래스 컴포넌트 -> 함수형 컴포넌트(함수형 프로그래밍)
-
useState
(== setState)
- 상태 유지 값과 그 값을 갱신하는 함수를 반환합니다.
const [state, setState] = useState(initialState) setState(newState)
-
useEffect
(== componentDidMount / componentDidUpdate )
useEffect(didUpdate) useEffect(() => { const subscription = props.source.subscribe() return () => { // Clean up the subscription subscription.unsubscribe() } }) // 조건부 useEffect의 두번째 인자에 들어오온 인자(props.source)가 변경될때만 작동 useEffect(() => { const subscription = props.source.subscribe() return () => { subscription.unsubscribe() } }, [props.source])
-
useContext
const value = useContext(MyContext)
-
useReducer
(== Redex.reducer())
const [state, dispatch] = useReducer(reducer, initialArg, init) const initialState = { count: 0 } function reducer(state, action) { switch (action.type) { case 'increment': return { count: state.count + 1 } case 'decrement': return { count: state.count - 1 } default: throw new Error() } } function Counter() { const [state, dispatch] = useReducer(reducer, initialState) return ( <> Count: {state.count} <button onClick={() => dispatch({ type: 'decrement' })}> - </button> <button onClick={() => dispatch({ type: 'increment' })}> + </button> </> ) }
-
useCallback
( == shouldComponentUpdate)
const memoizedCallback = useCallback(() => { doSomething(a, b) }, [a, b])
-
useMemo
( == useCallback)
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b])
-
useRef
(React.createRef())
-
useRef는 .current 프로퍼티로 ref에 접근가능!(.focus()로 많이 사용)
const refContainer = useRef(initialValue) function TextInputWithFocusButton() { const inputEl = useRef(null) const onButtonClick = () => { // `current` points to the mounted text input element inputEl.current.focus() } return ( <> <input ref={inputEl} type="text" /> <button onClick={onButtonClick}>Focus the input</button> </> ) }
-