Rumah > hujung hadapan web > tutorial js > Teknik React Advanced Setiap pemaju kanan harus menguasai

Teknik React Advanced Setiap pemaju kanan harus menguasai

Barbara Streisand
Lepaskan: 2025-01-28 14:33:10
asal
328 orang telah melayarinya

Advanced React Techniques Every Senior Developer Should Master

React, sebuah perpustakaan JavaScript terkemuka untuk mencipta antara muka pengguna (terutamanya aplikasi satu halaman), menuntut penguasaan teknik canggih untuk membina projek yang cekap, berskala, dan dikekalkan. Artikel ini meneroka 20 konsep React Advanced Essential untuk pemaju kanan, digambarkan dengan contoh -contoh TypeScript di mana relevan.

  1. Komponen pesanan tinggi (Hocs): HOCs mempromosikan kebolehgunaan semula kod dengan mengambil komponen dan mengembalikan versi yang diubahsuai.
<code class="language-typescript">import React from 'react';

const withLogger = (WrappedComponent: React.ComponentType) => {
  return class extends React.Component {
    componentDidMount() {
      console.log(`Component ${WrappedComponent.name} mounted`);
    }
    render() {
      return <WrappedComponent {...this.props} />;
    }
  };
};

const MyComponent: React.FC = () => <div>Hello World</div>;
const MyComponentWithLogger = withLogger(MyComponent);</code>
Salin selepas log masuk
Salin selepas log masuk
  1. Render Props: Kongsi Kongsi antara komponen menggunakan prop yang nilainya adalah fungsi.
<code class="language-typescript">import React from 'react';

interface DataFetcherProps {
  render: (data: any) => JSX.Element;
}

const DataFetcher: React.FC<DataFetcherProps> = ({ render }) => {
  const data = { name: 'John Doe' };
  return render(data);
};

const MyComponent: React.FC = () => (
  <DataFetcher render={(data) => <div>{data.name}</div>} />
);</code>
Salin selepas log masuk
Salin selepas log masuk
  1. Konteks API: memudahkan perkongsian data merentasi komponen, menghapuskan penggerudian prop.
<code class="language-typescript">import React, { createContext, useContext } from 'react';

const MyContext = createContext<string | null>(null);

const MyProvider: React.FC = ({ children }) => {
  const value = 'Hello from Context';
  return <MyContext.Provider value={value}>{children}</MyContext.Provider>;
};

const MyComponent: React.FC = () => {
  const value = useContext(MyContext);
  return <div>{value}</div>;
};</code>
Salin selepas log masuk
Salin selepas log masuk
  1. cangkuk tersuai: encapsulate dan guna semula logik negara.
<code class="language-typescript">import { useState, useEffect } from 'react';

const useFetch = (url: string) => {
  const [data, setData] = useState<any | null>(null);
  useEffect(() => {
    fetch(url)
      .then((response) => response.json())
      .then((data) => setData(data));
  }, [url]);
  return data;
};

const MyComponent: React.FC = () => {
  const data = useFetch('https://api.example.com/data');
  return <div>{data ? data.name : 'Loading...'}</div>;
};</code>
Salin selepas log masuk
  1. sempadan ralat: menangkap dan mengendalikan kesilapan javascript dalam pokok komponen.
<code class="language-typescript">import React from 'react';

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

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

  componentDidCatch(error: any, errorInfo: any) {
    console.error(error, errorInfo);
  }

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

const MyComponent: React.FC = () => {
  throw new Error('Test error');
  return <div>Hello World</div>;
};

const App: React.FC = () => (
  <ErrorBoundary><MyComponent /></ErrorBoundary>
);</code>
Salin selepas log masuk
  1. Pembahagian kod: Meningkatkan masa beban awal dengan memisahkan kod ke dalam ketulan yang lebih kecil. (Webpack, Rollup, dll.)
<code class="language-typescript">import React, { lazy, Suspense } from 'react';

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

const MyComponent: React.FC = () => (
  <Suspense fallback={<div>Loading...</div>}>
    <LazyComponent />
  </Suspense>
);</code>
Salin selepas log masuk
  1. Memoization (useMemo): Mengoptimumkan prestasi dengan pengiraan yang mahal.
<code class="language-typescript">import React, { useMemo } from 'react';

const MyComponent: React.FC = ({ items }) => {
  const sortedItems = useMemo(() => items.sort(), [items]);
  return <div>{sortedItems.join(', ')}</div>;
};</code>
Salin selepas log masuk
  1. portal: menjadikan kanak -kanak menjadi bahagian yang berbeza dari dom.
<code class="language-typescript">import React from 'react';
import ReactDOM from 'react-dom';

const MyPortal: React.FC = () => {
  return ReactDOM.createPortal(
    <div>This is rendered in a portal</div>,
    document.getElementById('portal-root')!
  );
};</code>
Salin selepas log masuk
  1. serpihan: kanak -kanak kumpulan tanpa menambah nod dom tambahan.
<code class="language-typescript">import React from 'react';

const MyComponent: React.FC = () => (
  <React.Fragment>
    <div>Item 1</div>
    <div>Item 2</div>
  </React.Fragment>
);</code>
Salin selepas log masuk
  1. refs dan dom: akses node dom atau elemen reaksi.
<code class="language-typescript">import React, { useRef, useEffect } from 'react';

const MyComponent: React.FC = () => {
  const inputRef = useRef<HTMLInputElement>(null);

  useEffect(() => {
    inputRef.current?.focus();
  }, []);

  return <input ref={inputRef} />;
};</code>
Salin selepas log masuk
  1. refs forwarding: lulus ref melalui komponen kepada anak -anak mereka.
<code class="language-typescript">import React, { forwardRef, useRef } from 'react';

const MyInput = forwardRef<HTMLInputElement>((props, ref) => (
  <input {...props} ref={ref} />
));

const MyComponent: React.FC = () => {
  const inputRef = useRef<HTMLInputElement>(null);
  return <MyInput ref={inputRef} />;
};</code>
Salin selepas log masuk
  1. Komponen terkawal dan tidak terkawal: Menguruskan keadaan komponen sama ada secara luaran atau dalaman.
<code class="language-typescript">import React, { useState, useRef } from 'react';

const ControlledComponent: React.FC = () => {
  const [value, setValue] = useState('');
  return <input type="text" value={value} onChange={(e) => setValue(e.target.value)} />;
};

const UncontrolledComponent: React.FC = () => {
  const inputRef = useRef<HTMLInputElement>(null);
  return <input type="text" ref={inputRef} />;
};</code>
Salin selepas log masuk
  1. Pengoptimuman Prestasi (React.Memo, Usememo, USECallback): Mencegah REDERS yang tidak perlu.
<code class="language-typescript">import React, { useCallback, memo } from 'react';

const MyComponent: React.FC<{ onClick: () => void }> = memo(({ onClick }) => {
  console.log('Rendering MyComponent');
  return <button onClick={onClick}>Click me</button>;
});

const ParentComponent: React.FC = () => {
  const handleClick = useCallback(() => {
    console.log('Button clicked');
  }, []);

  return <MyComponent onClick={handleClick} />;
};</code>
Salin selepas log masuk
  1. Rendering Server-Side (SSR): Membuat komponen pada pelayan untuk peningkatan SEO dan prestasi. (Memerlukan rangka kerja pelayan seperti Next.js atau remix.)

  2. Generasi tapak statik (SSG): halaman pra-membuat pada masa binaan. (Next.js, Gatsby, dan lain -lain)

  3. Penjanaan semula statik tambahan (ISR): Kemas kini kandungan statik selepas membina masa. (Next.js)

  4. mod serentak: Meningkatkan respons dan mengendalikan gangguan dengan anggun.

<code class="language-typescript">import React from 'react';

const withLogger = (WrappedComponent: React.ComponentType) => {
  return class extends React.Component {
    componentDidMount() {
      console.log(`Component ${WrappedComponent.name} mounted`);
    }
    render() {
      return <WrappedComponent {...this.props} />;
    }
  };
};

const MyComponent: React.FC = () => <div>Hello World</div>;
const MyComponentWithLogger = withLogger(MyComponent);</code>
Salin selepas log masuk
Salin selepas log masuk
  1. ketegangan untuk pengambilan data: mengendalikan keadaan pemuatan semasa pengambilan data.
<code class="language-typescript">import React from 'react';

interface DataFetcherProps {
  render: (data: any) => JSX.Element;
}

const DataFetcher: React.FC<DataFetcherProps> = ({ render }) => {
  const data = { name: 'John Doe' };
  return render(data);
};

const MyComponent: React.FC = () => (
  <DataFetcher render={(data) => <div>{data.name}</div>} />
);</code>
Salin selepas log masuk
Salin selepas log masuk
  1. React Query: Memudahkan pengambilan data, caching, dan penyegerakan.
<code class="language-typescript">import React, { createContext, useContext } from 'react';

const MyContext = createContext<string | null>(null);

const MyProvider: React.FC = ({ children }) => {
  const value = 'Hello from Context';
  return <MyContext.Provider value={value}>{children}</MyContext.Provider>;
};

const MyComponent: React.FC = () => {
  const value = useContext(MyContext);
  return <div>{value}</div>;
};</code>
Salin selepas log masuk
Salin selepas log masuk
  1. React Server Components: Campurkan interaktiviti sisi klien dengan manfaat penyampaian sisi pelayan. (Memerlukan rangka kerja yang menyokong RSC, seperti Next.js 13.)

Kesimpulan: Menguasai teknik-teknik canggih ini memberi kuasa kepada pemaju React Senior untuk membuat aplikasi yang berprestasi tinggi, dikekalkan, dan mantap. Dengan mengintegrasikan strategi ini ke dalam aliran kerja anda, anda akan dilengkapi untuk mengendalikan projek yang kompleks dan memberikan pengalaman pengguna yang luar biasa.

Atas ialah kandungan terperinci Teknik React Advanced Setiap pemaju kanan harus menguasai. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan