>웹 프론트엔드 >JS 튜토리얼 >모든 개발자가 알아야 할 필수 React 트릭

모든 개발자가 알아야 할 필수 React 트릭

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-03 12:58:02987검색

React는 놀라울 정도로 강력하지만 이를 마스터한다는 것은 기본을 뛰어넘어 개발을 간소화하기 위해 잘 알려지지 않은 몇 가지 트릭을 배우는 것을 의미합니다. 다음은 생산성을 높이고 더 깨끗하고 효과적인 코드를 작성하는 데 도움이 되는 개인적으로 좋아하는 20가지 React 트릭의 요약입니다. 예시를 바로 살펴보겠습니다!


1. 조건부 렌더링의 단락 평가

단락 평가를 사용한 조건부 렌더링에 대해 장황한 if 문을 사용하지 마세요.

{isLoading && <Spinner />}

이렇게 하면 isLoading이 true인 경우에만 JSX를 깔끔하게 유지하세요.


2. 클래스 이름 라이브러리가 있는 동적 클래스 이름

클래스 이름 라이브러리를 사용하면 클래스를 조건부로 쉽게 적용할 수 있습니다.

npm install classnames
import classNames from 'classnames';

const buttonClass = classNames({
  'btn': true,
  'btn-primary': isPrimary,
  'btn-secondary': !isPrimary,
});

<button className={buttonClass}>Click Me</button>

3. useMemo로 고가의 계산 메모하기

계산 비용이 많이 든다면 메모해 두어 React가 불필요하게 재계산하지 않도록 하세요.

const sortedData = useMemo(() => data.sort(), [data]);

데이터가 변경될 때만 sortedData를 다시 계산합니다.


4. useEffect를 사용한 입력 디바운싱

입력 변경 사항을 디바운싱하여 지속적인 재렌더링을 방지하세요.

const [value, setValue] = useState('');
const [debouncedValue, setDebouncedValue] = useState('');

useEffect(() => {
  const handler = setTimeout(() => setDebouncedValue(value), 500);
  return () => clearTimeout(handler);
}, [value]);

<input value={value} onChange={(e) => setValue(e.target.value)} />

5. 재사용 가능한 로직을 위한 맞춤형 후크

사용자 정의 후크에 로직을 캡슐화하여 구성 요소 전체에서 재사용합니다.

function useFetch(url) {
  const [data, setData] = useState(null);

  useEffect(() => {
    fetch(url).then(res => res.json()).then(setData);
  }, [url]);

  return data;
}

const Component = () => {
  const data = useFetch('/api/data');
  return <div>{data ? JSON.stringify(data) : 'Loading...'}</div>;
};

6. React.lazy를 사용한 지연 로딩 구성요소

구성 요소를 분할하여 로딩 시간을 최적화하세요.

const LazyComponent = React.lazy(() => import('./LazyComponent'));

function App() {
  return (
    <React.Suspense fallback={<div>Loading...</div>}>
      <LazyComponent />
    </React.Suspense>
  );
}

7. useRef를 사용하여 이전 Prop 또는 상태에 액세스

이전 상태 값에 액세스하려면 useRef를 사용하세요.

const [count, setCount] = useState(0);
const prevCount = useRef(count);

useEffect(() => {
  prevCount.current = count;
}, [count]);

console.log(`Previous: ${prevCount.current}, Current: ${count}`);

8. 콜백을 사용하도록 함수를 전달하여 재렌더링 방지

변경할 필요가 없는 함수라면 useCallback으로 메모하세요.

const increment = useCallback(() => setCount(count + 1), [count]);

9. 더 깔끔한 코드를 위한 구조 분해

함수 매개변수에서 소품을 바로 분해하세요.

const User = ({ name, age }) => (
  <div>{name} is {age} years old</div>
);

10. 추가 Div 없이 요소를 그룹화하기 위한 React.Fragment

추가 DOM 노드를 추가하지 않고 요소를 래핑합니다.

<>
  <p>Paragraph 1</p>
  <p>Paragraph 2</p>
</>

11. 자바스크립트 오류 포착을 위한 오류 경계

하위 구성 요소의 오류를 잡아 전체 앱이 충돌하는 것을 방지하세요.

class ErrorBoundary extends React.Component {
  state = { hasError: false };

  static getDerivedStateFromError() {
    return { hasError: true };
  }

  render() {
    if (this.state.hasError) return <h1>Something went wrong.</h1>;
    return this.props.children;
  }
}

Essential React Tricks Every Developer Must Know

Jagroop2001 (Jagroop) · GitHub

?‍? 풀스택 개발자 | ? 머신러닝 개발자 | ? 개발 관계 프로 – ? 대여 가능 - Jagroop2001

Essential React Tricks Every Developer Must Know github.com

12. Prop 유효성 검사를 위해 PropType 사용

소품 유형을 정의하여 버그를 조기에 잡아보세요.

{isLoading && <Spinner />}

13. useReducer를 사용한 상태 감소기

복잡한 상태 로직의 경우 useReducer가 더 효율적일 수 있습니다.

npm install classnames

14. DOM 조작을 위한 useLayoutEffect

DOM 업데이트 후 페인트 전에 효과를 실행합니다.

import classNames from 'classnames';

const buttonClass = classNames({
  'btn': true,
  'btn-primary': isPrimary,
  'btn-secondary': !isPrimary,
});

<button className={buttonClass}>Click Me</button>

15. Context 및 useContext로 상태 로직 캡슐화

prop 드릴링 없이 전역 상태를 생성합니다.

const sortedData = useMemo(() => data.sort(), [data]);

16. JSX에서 인라인 함수 정의를 피하세요

함수를 인라인으로 정의하면 다시 렌더링됩니다. 대신 외부에서 정의하세요.

const [value, setValue] = useState('');
const [debouncedValue, setDebouncedValue] = useState('');

useEffect(() => {
  const handler = setTimeout(() => setDebouncedValue(value), 500);
  return () => clearTimeout(handler);
}, [value]);

<input value={value} onChange={(e) => setValue(e.target.value)} />

17. 안전한 자산 액세스를 위해 JSX에서 선택적 체인 사용

null 또는 정의되지 않은 값을 적절하게 처리합니다.

function useFetch(url) {
  const [data, setData] = useState(null);

  useEffect(() => {
    fetch(url).then(res => res.json()).then(setData);
  }, [url]);

  return data;
}

const Component = () => {
  const data = useFetch('/api/data');
  return <div>{data ? JSON.stringify(data) : 'Loading...'}</div>;
};

18. 재렌더링 문제를 피하기 위해 key Prop을 사용하세요

목록을 렌더링할 때는 항상 고유 키를 사용하세요.

const LazyComponent = React.lazy(() => import('./LazyComponent'));

function App() {
  return (
    <React.Suspense fallback={<div>Loading...</div>}>
      <LazyComponent />
    </React.Suspense>
  );
}

19. 더 나은 수입 통제를 위해 명명된 수출로 부품 수출

이름이 지정된 내보내기를 사용하면 특정 구성요소를 더 쉽게 가져올 수 있습니다.

const [count, setCount] = useState(0);
const prevCount = useRef(count);

useEffect(() => {
  prevCount.current = count;
}, [count]);

console.log(`Previous: ${prevCount.current}, Current: ${count}`);

그런 다음 필요에 따라 가져옵니다.

const increment = useCallback(() => setCount(count + 1), [count]);

20. 재사용 가능한 구성요소 패턴: 고차 구성요소(HOC)

추가 로직을 추가하려면 구성 요소를 HOC로 래핑하세요.

const User = ({ name, age }) => (
  <div>{name} is {age} years old</div>
);

이러한 요령을 익히면 더욱 간결하고 읽기 쉽고 효율적인 React 코드를 작성하는 데 도움이 됩니다! 즐거운 코딩하세요!

위 내용은 모든 개발자가 알아야 할 필수 React 트릭의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.