Nyatakan dalam React merujuk kepada data atau sifat yang mengawal tingkah laku dan rendering komponen. Ini boleh berubah dan boleh berubah dari masa ke masa, mencetuskan semula untuk mengemas kini antara muka pengguna. Negeri adalah penting untuk mewujudkan aplikasi web interaktif dan dinamik.
Menguruskan Negeri dalam Komponen Kelas:
Dalam komponen kelas, keadaan diuruskan menggunakan objek this.state
. Anda memulakan keadaan dalam pembina dan boleh mengemas kini menggunakan this.setState()
. Inilah contoh:
<code class="javascript">class ExampleComponent extends React.Component { constructor(props) { super(props); this.state = { count: 0 }; } incrementCount = () => { this.setState({ count: this.state.count 1 }); }; render() { return ( <div> <p>Count: {this.state.count}</p> <button onclick="{this.incrementCount}">Increment</button> </div> ); } }</code>
Menguruskan Negeri dalam Komponen Fungsi:
Dalam komponen fungsional, keadaan diuruskan menggunakan cangkuk useState
yang diperkenalkan dalam React 16.8. Cangkuk useState
membolehkan anda menambah keadaan kepada komponen berfungsi. Inilah caranya:
<code class="javascript">import React, { useState } from 'react'; function ExampleComponent() { const [count, setCount] = useState(0); const incrementCount = () => { setCount(count 1); }; return ( <div> <p>Count: {count}</p> <button onclick="{incrementCount}">Increment</button> </div> ); }</code>
Dalam contoh ini, useState
mengembalikan array di mana elemen pertama adalah nilai keadaan semasa, dan yang kedua adalah fungsi untuk mengemas kini.
Kemas kini keadaan:
this.setState()
. Ia boleh mengambil objek atau fungsi sebagai hujah. Apabila menggunakan objek, React menggabungkan objek dengan keadaan semasa. Menggunakan fungsi memastikan anda bekerja dengan keadaan yang paling terkini, yang penting untuk kemas kini negara tak segerak.useState
. Fungsi ini mengambil nilai keadaan baru sebagai hujah dan mengemas kini keadaan.Perbezaan antara setstate dan useState:
Sintaks dan Penggunaan:
setState
adalah kaedah pada contoh kelas dan perlu terikat jika digunakan dalam pengendali acara.useState
mengembalikan array yang boleh anda gunakan dengan pemusnahan array, menjadikannya lebih ringkas dan mudah.Sifat Asynchronous:
setState
dan fungsi yang dikembalikan oleh useState
tidak segerak. Walau bagaimanapun, setState
boleh menerima fungsi panggil balik untuk dilaksanakan selepas keadaan telah dikemas kini, sementara useState
tidak menyediakan mekanisme terbina dalam ini. Anda biasanya akan menggunakan useEffect
untuk mengendalikan kesan sampingan selepas perubahan keadaan dalam komponen berfungsi.Menggabungkan Negeri:
setState
menggabungkan keadaan baru dengan keadaan yang sedia ada, yang berguna untuk mengemas kini objek atau tatasusunan bersarang.useState
menggantikan keseluruhan nilai negeri. Anda perlu menggabungkan keadaan secara manual dalam komponen berfungsi, sering menggunakan borang kemas kini fungsi seperti setCount(prevCount => prevCount 1)
.Amalan terbaik untuk menguruskan keadaan kompleks:
.map()
, .filter()
, dan pengendali penyebaran untuk membuat objek negara baru.Kaedah kitaran hayat vs useeffect:
componentDidMount
, componentDidUpdate
, dan componentWillUnmount
. Mereka digunakan untuk menguruskan kesan sampingan seperti mengambil data, menyediakan langganan, dan membersihkannya.useEffect
berfungsi sebagai bersamaan dengan semua kaedah kitaran hayat dalam komponen berfungsi. Ia boleh dijalankan selepas setiap render, selepas yang pertama, atau apabila kebergantungan tertentu berubah. Anda boleh mengembalikan fungsi pembersihan untuk mengendalikan tingkah laku seperti ComponentWillUnmount.Contoh useeffect:
<code class="javascript">import React, { useState, useEffect } from 'react'; function ExampleComponent() { const [count, setCount] = useState(0); useEffect(() => { document.title = `Count: ${count}`; // Cleanup function return () => { document.title = 'React App'; }; }, [count]); return ( <div> <p>Count: {count}</p> <button onclick="{()"> setCount(count 1)}>Increment</button> </div> ); }</code>
Kesan Pengurusan Negeri pada Rendering semula:
shouldComponentUpdate
untuk mengelakkan pengendali semula yang tidak perlu dengan mengembalikan false
jika prop atau negeri baru tidak menyebabkan perubahan visual. Dalam komponen fungsional, React.memo
berfungsi dengan tujuan yang sama, mencegah pengendali semula jika prop tidak berubah.Teknik Pengoptimuman:
React.PureComponent
untuk komponen kelas. Ia melaksanakan shouldComponentUpdate
dengan perbandingan prop dan perbandingan cetek.React.memo
untuk mengelakkan pengendali semula yang tidak perlu jika prop adalah sama.useCallback
untuk memoize fungsi panggil balik dan useMemo
untuk memoize nilai-nilai yang dikira, mencegah pengkomputeran semula yang tidak perlu.key
untuk membantu bertindak balas mengenal pasti item yang telah berubah, telah ditambah, atau telah dikeluarkan.Suspense
React.lazy
.react-window
atau react-virtualized
untuk menjadikan hanya item yang kelihatan.Contoh pengoptimuman dengan memo dan usecallback:
<code class="javascript">import React, { useState, useCallback } from 'react'; const ChildComponent = React.memo(function ChildComponent({ onClick }) { console.log('ChildComponent rendered'); return <button onclick="{onClick}">Click me</button>; }); function ParentComponent() { const [count, setCount] = useState(0); const handleClick = useCallback(() => { setCount(count 1); }, [count]); return ( <div> <p>Count: {count}</p> <childcomponent onclick="{handleClick}"></childcomponent> </div> ); }</code>
Dalam contoh ini, ChildComponent
hanya akan membuat semula jika perubahan onClick
, terima kasih kepada React.memo
dan useCallback
.
Atas ialah kandungan terperinci Apakah keadaan dalam React? Bagaimana anda menguruskan negeri dalam kelas dan komponen berfungsi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!