typescript를 사용하여 React에서 사용자 지정 후크를 만드는 방법은 무엇입니까?
4226 단어 webdevtypescriptreactjavascript
React hooks은 기본적으로 함수 구성 요소에서 React 상태 및 수명 주기 기능에 "연결"할 수 있는 기능이므로 더 복잡하고 혼란스러운 클래스 구성 요소가 아닌 기능적 구성 요소를 사용하여 문제를 해결하는 데 도움이 됩니다.
사용자 지정 후크를 만드는 것은 새로운 업계 관행이며 여전히 많은 반응 개발자가 이를 찾고 있습니다.
따라서 여기 이 튜토리얼에서는 커스텀 훅이 무엇인지, 그리고 우리만의 방식으로 구현하는 방법을 설명하겠습니다. 다음은 염두에 두어야 할 몇 가지 사항입니다.
use
라는 단어로 시작하므로 react는 이를 후크로 식별합니다. 그렇지 않으면 후크는 일부 작업을 수행하고 무언가를 반환하는 일반 함수 또는 구성 요소처럼 작동합니다. 이제 구성 요소의 렌더링 횟수를 찾기 위해 후크를 만들고 있습니다. 여기에서 우리는 현재 속성을 사용하기 위해 useRef 후크를 사용하고 있습니다.
import React, { useRef } from 'react';
const SHOW_RENDER_COUNTERS = true;
export const useRenderCounter = (): number | null => {
const renderCount = useRef(0);
renderCount.current = renderCount.current + 1;
if (SHOW_RENDER_COUNTERS) {
return renderCount.current
}
return null;
};
이제 이 후크를 사용하여 렌더링 횟수를 찾고자 할 때마다 다음과 같이 사용할 수 있습니다.
const FindCount = () => {
const renderCounter = useRenderCounter();
return (
<>
<SomeComponentCode />
{renderCounter}
</>
);
};
이것이 우리가 사용자 지정 후크를 만들고 사용하는 방법입니다.
사용자 지정 후크의 다른 예는 다음과 같습니다.
1. 사용자가 무언가를 클릭할 때 툴팁을 표시하도록 연결합니다.
import { useState, useRef, useEffect } from 'react'
export const useTooltip = (initialState: boolean) => {
const ref = useRef<HTMLDivElement>(null)
const [showTooltip, setShowTooltip] = useState<boolean>(initialState)
const handleClick = (event: any) => {
if (ref.current && !ref.current.contains(event.target)) {
setShowTooltip(false)
}
}
useEffect(() => {
document.addEventListener('click', handleClick, true)
return () => document.removeEventListener('click', handleClick, true)
}, [ref])
return { showTooltip, setShowTooltip, ref }
}
2. 화면 높이를 얻기 위해 연결합니다.
import { useState, useEffect, useRef, RefObject } from 'react'
interface InterfaceSize {
size: number
sizeRef: RefObject<HTMLDivElement>
}
const useSize = (initialValue: number): InterfaceSize => {
const sizeRef = useRef<HTMLDivElement>(null)
const [size, setSize] = useState<number>(initialValue)
useEffect(() => {
setTimeout(() => {
if (sizeRef.current) {
setSize(sizeRef.current?.getBoundingClientRect().height)
}
}, 100)
}, [size])
return { size, sizeRef }
}
export default useSize
3. 전달된 참조 외부를 클릭할 때 경고를 주는 후크.
import React, { useRef, useEffect } from "react";
/**
* Hook that alerts clicks outside of the passed ref
*/
function useOutsideAlerter(ref: React.RefObject<HTMLInputElement>) {
useEffect(() => {
/**
* Alert if clicked on outside of element
*/
function handleClickOutside(event: Event) {
if (ref.current && !ref.current.contains(event.target as Node))) {
alert("You clicked outside of me!");
}
}
// Bind the event listener
document.addEventListener("mousedown", handleClickOutside);
return () => {
// Unbind the event listener on clean up
document.removeEventListener("mousedown", handleClickOutside);
};
}, [ref]);
}
/**
* Component that alerts if you click outside of it
*/
export default function OutsideAlerter(props) {
const wrapperRef = useRef(null);
useOutsideAlerter(wrapperRef);
return <div ref={wrapperRef}>{props.children}</div>;
}
Reference
이 문제에 관하여(typescript를 사용하여 React에서 사용자 지정 후크를 만드는 방법은 무엇입니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ritikbanger/how-to-create-a-custom-hook-in-react-with-typescript-5c1j텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)