Komponen React adalah blok bangunan aplikasi React, dan mereka boleh dikategorikan kepada dua jenis utama: komponen fungsional dan komponen kelas.
Komponen Fungsian:
Berikut adalah contoh asas komponen berfungsi:
<code class="javascript">function Welcome(props) { return <h1>Hello, {props.name}</h1>; }</code>
Komponen Kelas:
React.Component
.this
untuk mengakses kaedah prop, keadaan, dan kitaran hayat.componentDidMount
, componentDidUpdate
, dan componentWillUnmount
, yang digunakan untuk menguruskan kitaran hayat komponen.Berikut adalah contoh asas komponen kelas:
<code class="javascript">class Welcome extends React.Component { render() { return <h1>Hello, {this.props.name}</h1>; } }</code>
Pilihan antara komponen fungsional dan kelas sebahagian besarnya bergantung pada versi React yang anda gunakan dan keperluan khusus komponen anda.
Gunakan komponen fungsional apabila:
useState
, useEffect
, useContext
, dan lain -lain, membuat komponen berfungsi lebih berkuasa dan serba boleh.this
dan kitaran hayat, yang boleh menjadi rawan ralat dalam komponen kelas.Gunakan komponen kelas apabila:
getDerivedStateFromProps
atau getSnapshotBeforeUpdate
.Dalam perkembangan reaksi moden, komponen fungsional dengan cangkuk biasanya disukai kerana kesederhanaan mereka dan keupayaan untuk mengendalikan semua fungsi yang sebelum ini eksklusif untuk komponen kelas.
Pengurusan negeri dalam React telah berkembang dengan ketara dengan pengenalan cangkuk, yang mempengaruhi bagaimana keadaan ditangani dalam komponen fungsional dan kelas.
Negeri dalam Komponen Kelas:
state
, yang dimulakan dalam pembina.this.state
dan this.setState()
.this.setState()
tidak segerak dan boleh menerima fungsi panggil balik untuk dijalankan selepas negeri telah dikemas kini.Contoh:
<code class="javascript">class Counter extends React.Component { constructor(props) { super(props); this.state = { count: 0 }; } increment = () => { this.setState({ count: this.state.count 1 }); } render() { return ( <div> <p>Count: {this.state.count}</p> <button onclick="{this.increment}">Increment</button> </div> ); } }</code>
Nyatakan dalam komponen berfungsi:
useState
untuk menguruskan keadaan.useState
Mengembalikan pemboleh ubah keadaan dan fungsi untuk mengemas kini.Contoh:
<code class="javascript">function Counter() { const [count, setCount] = useState(0); const increment = () => { setCount(count 1); } return ( <div> <p>Count: {count}</p> <button onclick="{increment}">Increment</button> </div> ); }</code>
Perbezaan utama termasuk:
useState
this.state
this.setState()
this.setState()
dalam komponen kelas tidak segerak, sedangkan kemas kini dengan useState
adalah segerak.useEffect
untuk tujuan yang sama.Mengoptimumkan prestasi komponen React adalah penting untuk membina aplikasi yang cekap. Komponen fungsional dengan cangkuk menawarkan beberapa kelebihan berbanding komponen kelas dalam hal ini.
Memoisasi dengan useMemo
dan useCallback
:
useMemo
untuk memoize pengiraan mahal dan useCallback
untuk memoize fungsi. Ini menghalang pelaku semula yang tidak perlu dengan menghalang pengiraan semula nilai atau rekreasi fungsi. Contoh dengan useMemo
:
<code class="javascript">function MyComponent({ prop }) { const expensiveResult = useMemo(() => computeExpensiveValue(prop), [prop]); return <div>{expensiveResult}</div>; }</code>
shouldComponentUpdate
atau menggunakan React.memo
. Mengelakkan pelaku semula yang tidak perlu dengan React.memo
:
React.memo
boleh digunakan untuk memoize komponen berfungsi, menghalang pengendali semula yang tidak perlu jika alat peraga tidak berubah.Contoh:
<code class="javascript">const MyComponent = React.memo(function MyComponent(props) { // Component implementation });</code>
PureComponent
atau melaksanakan shouldComponentUpdate
untuk mencapai hasil yang sama, tetapi kaedah ini kurang fleksibel daripada React.memo
. Mengoptimumkan kemas kini negeri dengan useState
dan useReducer
:
useState
dan useReducer
boleh digunakan bersempena dengan useCallback
untuk memastikan bahawa panggilan balik tidak menyebabkan render yang tidak perlu. Contoh dengan useReducer
:
<code class="javascript">const initialState = { count: 0 }; function reducer(state, action) { switch (action.type) { case 'increment': 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: 'increment' })}> </button> > ); }</code>
this.setState()
, yang boleh kurang efisien dari segi penalaan prestasi. Pengoptimuman kitaran hayat dengan useEffect
:
useEffect
dalam komponen berfungsi membolehkan kawalan halus ke atas kesan sampingan, termasuk kemas kini berasaskan pembersihan dan ketergantungan.Contoh:
<code class="javascript">function MyComponent() { useEffect(() => { // Side effect code here return () => { // Cleanup code here }; }, [/* dependencies */]); // Component implementation }</code>
Ringkasnya, komponen berfungsi dengan cangkuk menawarkan cara yang lebih fleksibel dan cekap untuk mengoptimumkan prestasi berbanding dengan komponen kelas. Dengan memanfaatkan cangkuk seperti useMemo
, useCallback
, dan useEffect
, pemaju dapat mencapai prestasi yang lebih baik dengan kod boilerplate yang kurang.
Atas ialah kandungan terperinci Apakah pelbagai jenis komponen React (berfungsi, kelas)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!