10가지 반응 후크 설명 ✨
19912 단어 writingshowdevjavascriptreact
React Hooks(React < 16.8) 이전에는 개발자가 특정 React 기능을 활용하기 위해 구성 요소를 작성해야 했습니다
class
. 그러나 이제 React Hooks
는 구성 요소 계층 구조를 변경하지 않고 상태 저장 논리를 사용할 수 있기 때문에 구성 요소를 빌드하는 보다 인체 공학적인 방법을 제공합니다.총 10개의 훅이 있습니다 🔥
🚀 사용상태 :
가장 중요하고 자주 사용되는 후크입니다. 반응성 데이터를 처리하는 이 후크의 목적은 애플리케이션에서 변경되는 모든 데이터를 상태라고 하며 데이터가 변경되면 React가 UI를 다시 렌더링합니다.
const [count, setCount] = React.useState(0);
🚀 useEffect :
이를 통해 단일 함수 API 내에서 모든 수명 주기 후크를 구현할 수 있습니다.
// this will run when the component mounts and anytime the stateful data changes
React.useEffect(() => {
alert('Hey, Nads here!');
});
// this will run, when the component is first initialized
React.useEffect(() => {
alert('Hey, Nads here!');
}, []);
// this will run only when count state changes
React.useEffect(() => {
fetch('nads').then(() => setLoaded(true));
}, [count]);
// this will run when the component is destroyed or before the component is removed from UI.
React.useEffect(() => {
alert('Hey, Nads here');
return () => alert('Goodbye Component');
});
🚀 useContext :
이 후크를 사용하면
React's Context API
로 작업할 수 있습니다. 이 메커니즘 자체는 소품을 거치지 않고 구성 요소 트리 내에서 데이터를 공유할 수 있는 메커니즘입니다. 기본적으로 제거합니다prop-drilling
.const ans = {
right: '✅',
wrong: '❌'
}
const AnsContext = createContext(ans);
function Exam(props) {
return (
// Any child component inside this component can access the value which is sent.
<AnsContext.Provider value={ans.right}>
<RightAns />
</AnsContext.Provider>
)
}
function RightAns() {
// it consumes value from the nearest parent provider.
const ans = React.useContext(AnsContext);
return <p>{ans}</p>
// previously we were required to wrap up inside the AnsContext.Consumer
// but this useContext hook, get rids that.
}
🚀 useRef :
이 후크를 사용하면 변경 가능한 개체를 만들 수 있습니다. useState hook과 같이 값이 변경된 상태를 유지할 때 사용하지만 차이점은 값이 변경될 때 다시 렌더링하지 않는다는 것입니다.
일반적인 사용 사례는 DOM에서 HTML 요소를 가져오는 것입니다.
function App() {
const myBtn = React.useRef(null);
const handleBtn = () => myBtn.current.click();
return (
<button ref={myBtn} onChange={handleBtn} >
</button>
)
}
🚀 useReducer :
setState와 매우 유사하며
Redux Pattern
를 사용하여 상태를 관리하는 다른 방법입니다. 상태를 직접 업데이트하는 대신 dispatch
함수로 이동하는 reducer
작업을 수행하고 이 함수는 다음 상태를 계산하는 방법을 알아냅니다.그림. useReducer 아키텍처
function reducer(state, dispatch) {
switch(action.type) {
case 'increment':
return state+1;
case 'decrement':
return state-1;
default:
throw new Error();
}
}
function useReducer() {
// state is the state we want to show in the UI.
const [state, dispatch] = React.useReducer(reducer, 0);
return (
<>
Count : {state}
<button onClick={() => dispatch({type:'decrement'})}>-</button>
<button onClick={() => dispatch({type:'increment'})}>+</button>
</>
)
}
🚀 사용메모 :
이 후크는 계산 비용을 최적화하거나 성능을 향상시키는 데 도움이 됩니다. 값비싼 계산이 필요할 때 주로 사용됩니다.
function useMemo() {
const [count, setCount] = React.useState(60);
const expensiveCount = useMemo(() => {
return count**2;
}, [count]) // recompute when count changes.
}
반환된 값을 메모하는 데 효과적이지만 다른
CSSNamespaceRule
에서는 전체 함수를 메모하고 싶을 때 이 후크를 사용할 수 있습니다 ↓🚀 useCallback :
function useCallbackDemo() {
const [count, setCount] = useState(60);
const showCount = React.useCallback(() => {
alert(`Count ${count}`);
}, [count])
return <> <SomeChild handler = {showCount} /> </>
}
🚀 useImperativeHandle :
이 후크는 노출된 참조를 수정하는 데 사용되며 거의 사용되지 않습니다.
function useImperativeHandleDemo(props, ref) {
const myBtn = useRef(null);
React.useImperativeHandle(ref, () => ({
click: () => {
console.log('clicking button!');
myBtn.current.click();
}
}));
}
🚀 레이아웃 효과 사용:
한 가지 차이점을 제외하면 useEffect 후크와 동일하게 작동합니다. 콜백은 구성 요소를 렌더링한 후 실제 업데이트가 화면에 그려지기 전에 실행됩니다.
⚠️ : 콜백이 완료될 때까지 시각적 업데이트를 차단합니다.
function useLayoutEffectDemo() {
const myBtn = React.useRef(null);
React.useLayoutEffect(() => {
const rect = myBtn.current.getBoundingClientRect();
// scroll position before the dom is visually updated
console.log(rect.height);
})
}
🚀 디버그 값 사용:
이 후크는 별 의미가 없지만 디버깅에 유용한
React Dev Tools
에서 사용자 지정 레이블을 정의할 수 있습니다. 동일한 논리를 사용하는 구성 요소가 n
개 있다고 가정하면 자체 기능을 별도로 정의하고 다른 구성 요소에서 사용할 수 있지만 여기서 핵심은 디버깅할 수 있다는 것입니다.function useDisplayName() {
const [displayName, setDisplayName] = React.useState();
React.useEffect(() => {
const data = fetchFromDatabase(props.userId);
setDisplayName(data.displayName);
}, []);
React.useDebugValue(displayName ?? 'loading...');
return displayName;
}
반환 값은 다른 구성 요소 또는 이와 같은 응용 프로그램의 다른 위치에서 사용할 수 있습니다 👇🏽
function App() {
const displayName = useDisplayName();
return <button>{displayName}</button>;
}
참조 -
Fireship's Youtube Video
- React Hooks연결하시겠습니까?
Reference
이 문제에 관하여(10가지 반응 후크 설명 ✨), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/abhisheknaiidu/10-react-hooks-explained-3ino텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)