


Analisis ringkas tentang penggunaan fungsi useEffecfa dalam React Hook
Artikel ini akan memperkenalkan anda kepada fungsi useEffecfa dalam React Hook dan bercakap tentang butiran fungsi useEffecfa saya harap ia akan membantu anda!
Analisis terperinci useEffect
Penggunaan asas useEffecf
Bersambung daripada perkara di atas, dalam artikel sebelum ini kami menerangkan State Hook Kami sudah boleh menggunakan cangkuk ini untuk menentukan keadaan dalam komponen berfungsi. [Cadangan berkaitan: Tutorial video Redis, Video pengaturcaraan]
Kami tahu bahawa mungkin terdapat fungsi kitaran hayat dalam komponen kelas, kemudian Bagaimana untuk mentakrifkan fungsi yang serupa dengan kitaran hayat dalam komponen fungsi?
Effect Hook membolehkan anda melengkapkan beberapa fungsi yang serupa dengan kitaran hayat dalam kelas;
Fakta Sama seperti permintaan rangkaian, kemas kini DOM manual, dan beberapa pemantauan acara, semuanya adalah kesan sampingan React yang mengemas kini DOM;
Jadi Cangkuk yang melengkapkan fungsi ini dipanggil Cangkuk Kesan;
Andaikan kita kini mempunyai keperluan: tajuk dalam halaman sentiasa memaparkan bilangan pembilang, gunakan komponen kelas dan Cangkuk untuk melaksanakan kelas :
masing-masing Pelaksanaan komponen
import React, { PureComponent } from 'react' export class App extends PureComponent { constructor() { super() this.state = { counter: 100 } } // 进入页面时, 标题显示counter componentDidMount() { document.title = this.state.counter } // 数据发生变化时, 让标题一起变化 componentDidUpdate() { document.title = this.state.counter } render() { const { counter } = this.state return ( <div> <h2 id="counter">{counter}</h2> <button onClick={() => this.setState({counter: counter+1})}>+1</button> </div> ) } } export default App
Komponen Fungsi Plus pelaksanaan cangkuk:
melalui cangkuk useeffect, anda boleh memberitahu React bahawa ia perlu melakukan operasi tertentu selepas rendering; kami untuk meneruskan fungsi panggil balik. Selepas React menyelesaikan operasi DOM kemas kini (
- iaitu, selepas komponen diberikan
), fungsi ini akan dipanggil semula- , ini fungsi panggil balik akan dilaksanakan sama ada selepas pemaparan pertama atau selepas setiap kemas kini secara amnya kami menulis operasi kesan sampingan dalam fungsi panggil balik ini (
seperti permintaan rangkaian, operasi DOM , mendengar acara- )
Oleh itu, perlu diingatkan bahawa terdapat banyak pepatah yang useEffect digunakan untuk mensimulasikan kitaran hayat, tetapi sebenarnya ia tidak; useEffect boleh mensimulasikan kitaran hayat, Tetapi fungsi utamanya adalah untuk melakukan kesan sampingan默认情况下
import React, { memo, useEffect, useState } from 'react' const App = memo(() => { const [counter, setCounter] = useState(200) // useEffect传入一个回调函数, 在页面渲染完成后自动执行 useEffect(() => { // 一般在该回调函数在编写副作用的代码(网络请求, 操作DOM, 事件监听) document.title = counter }) return ( <div> <h2 id="counter">{counter}</h2> <button onClick={() => setCounter(counter+1)}>+1</button> </div> ) }) export default App
Jelaskan kesan sampingan (Kesan)Semasa proses penulisan komponen kelas, kita perlu mengosongkan kod kesan sampingan tertentu dalam componentWillUnmount
:Contohnya, bas acara sebelumnya atau panggilan manual dalam langgan Redux;
semua perlu mempunyai penyahlangganan yang sepadan dalam componentWillUnmount;Bagaimana Effect Hook mensimulasikan componentWillUnmount? useEffect yang diluluskan dalamsendiri boleh mempunyai nilai pulangan, iaitu satu lagi
:回调函数A
回调函数B
type EffectCallback = () => (void | (() => void | undefined));
Mengapa kita perlu mengembalikan fungsi yang berkuat kuasa? kesan. Setiap kesan boleh mengembalikan fungsi pembersihan;
Dengan cara ini, logik langganan boleh disatukan;
Semuanya adalah sebahagian daripada kesan;Seperti yang dipelajari sebelum ini, kesan dilaksanakan setiap kali ia dipaparkan; >Bilakah React membersihkan kesannya?
React akan melaksanakan operasi pembersihan apabila komponen dikemas kini dan dinyahpasang, membatalkan pemantauan terakhir, hanya meninggalkan pemantauan semasa; 🎜>添加和移除
Salah satu tujuan menggunakan Hook adalah untuk menyelesaikan masalah sering menyatukan banyak logik dalam kitaran hayat kelas :
Cangkuk Kesan Berbilang boleh digunakan dalam komponen fungsi, dan kita boleh memisahkan logik kepada; Kesan kegunaan yang berbezaSebagai contoh, permintaan rangkaian , pemantauan acara dan pengubahsuaian manual DOM, ini selalunya diletakkan dalam componentDidMount
import React, { memo, useEffect } from 'react' const App = memo(() => { useEffect(() => { // 监听store数据发生改变 const unsubscribe = store.subscribe(() => { }) // 返回值是一个回调函数, 该回调函数在组件重新渲染或者要卸载时执行 return () => { // 取消监听操作 unsubscribe() } }) return ( <div> <h2 id="App">App</h2> </div> ) }) export default App:
Cangkuk membolehkan kita mengasingkan kod mengikut tujuannya, bukannya meletakkan banyak logik bersama-sama seperti fungsi kitaran hayat :
React akan mengikut susunan pengisytiharan kesanSetiap kesan dalam komponen;
pengoptimuman prestasi useEffect
import React, { memo, useEffect } from 'react' const App = memo(() => { // 监听的useEffect useEffect(() => { console.log("监听的代码逻辑") return () => { console.log("取消的监听代码逻辑") } }) // 发送网络请求的useEffect useEffect(() => { console.log("网络请求的代码逻辑") }) // 操作DOM的useEffect useEffect(() => { console.log("操作DOM的代码逻辑") }) return ( <div> App </div> ) }) export default AppSecara lalai, fungsi panggil balik useEffect akan dilaksanakan semula setiap kali ia dipaparkan, tetapi ini akan menyebabkan dua masalah
:
Sesetengah kod yang kami hanya mahu jalankan Hanya lakukan sekali sahaja (Sebagai contoh, permintaan rangkaian boleh dilaksanakan sekali semasa pemaparan pertama komponen. Tidak perlu melaksanakannya beberapa kali), sama seperti yang dilakukan dalam componentDidMount dan componentWillUnmount dalam komponen kelas;
Selain itu, pelbagai pelaksanaan juga akan menyebabkan masalah prestasi tertentu;依次调用
Bagaimanakah kita memutuskan bila useEffect harus dilaksanakan dan bila ia tidak sepatutnya dilaksanakan ?
useEffect sebenarnya mempunyai dua parameter:- 参数一: 执行的回调函数, 这个参数我们已经使用过了不再多说;
- 参数二: 是一个数组类型, 表示 该useEffect在哪些state发生变化时,才重新执行;(受谁的影响才会重新执行)
案例练习:
受count影响的Effect;
import React, { memo, useEffect, useState } from 'react' const App = memo(() => { const [counter, setCounter] = useState(100) // 发送网络请求的useEffect, 只有在counter发生改变时才会重新执行 useEffect(() => { console.log("网络请求的代码逻辑") }, [counter]) return ( <div> <h2 id="nbsp-setCounter-counter-counter"> setCounter(counter+1)}>{counter}</h2> </div> ) }) export default App
但是,如果一个函数我们不希望依赖任何的内容时
,也可以传入一个空的数组 []:
那么这里的两个回调函数分别对应的就是componentDidMount和componentWillUnmount生命周期函数了;
import React, { memo, useEffect, useState } from 'react' const App = memo(() => { const [counter, setCounter] = useState(100) // 传入空数组表示不受任何数据依赖 useEffect(() => { // 此时传入的参数一这个回调函数: 相当于componentDidMount console.log("监听的代码逻辑") // 参数一这个回调函数的返回值: 相当于componentWillUnmount return () => { console.log("取消的监听代码逻辑") } }, []) return ( <div> <h2 id="nbsp-setCounter-counter-counter"> setCounter(counter+1)}>{counter}</h2> </div> ) }) export default App
总结: useEffect可以模拟之前的class组件的生命周期(类似而不是相等), 并且它比原来的生命周期更加强大, 青出于蓝而胜于蓝
更多编程相关知识,请访问:编程教学!!
Atas ialah kandungan terperinci Analisis ringkas tentang penggunaan fungsi useEffecfa dalam React Hook. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Aplikasi JavaScript di dunia nyata termasuk pengaturcaraan sisi pelayan, pembangunan aplikasi mudah alih dan Internet of Things Control: 1. Pengaturcaraan sisi pelayan direalisasikan melalui node.js, sesuai untuk pemprosesan permintaan serentak yang tinggi. 2. Pembangunan aplikasi mudah alih dijalankan melalui reaktnatif dan menyokong penggunaan silang platform. 3. Digunakan untuk kawalan peranti IoT melalui Perpustakaan Johnny-Five, sesuai untuk interaksi perkakasan.

Saya membina aplikasi SaaS multi-penyewa berfungsi (aplikasi edTech) dengan alat teknologi harian anda dan anda boleh melakukan perkara yang sama. Pertama, apakah aplikasi SaaS multi-penyewa? Aplikasi SaaS Multi-penyewa membolehkan anda melayani beberapa pelanggan dari Sing

Artikel ini menunjukkan integrasi frontend dengan backend yang dijamin oleh permit, membina aplikasi edtech SaaS yang berfungsi menggunakan Next.Js. Frontend mengambil kebenaran pengguna untuk mengawal penglihatan UI dan memastikan permintaan API mematuhi dasar peranan

JavaScript adalah bahasa utama pembangunan web moden dan digunakan secara meluas untuk kepelbagaian dan fleksibiliti. 1) Pembangunan front-end: Membina laman web dinamik dan aplikasi satu halaman melalui operasi DOM dan kerangka moden (seperti React, Vue.js, sudut). 2) Pembangunan sisi pelayan: Node.js menggunakan model I/O yang tidak menyekat untuk mengendalikan aplikasi konkurensi tinggi dan masa nyata. 3) Pembangunan aplikasi mudah alih dan desktop: Pembangunan silang platform direalisasikan melalui reaktnatif dan elektron untuk meningkatkan kecekapan pembangunan.

Trend terkini dalam JavaScript termasuk kebangkitan TypeScript, populariti kerangka dan perpustakaan moden, dan penerapan webassembly. Prospek masa depan meliputi sistem jenis yang lebih berkuasa, pembangunan JavaScript, pengembangan kecerdasan buatan dan pembelajaran mesin, dan potensi pengkomputeran IoT dan kelebihan.

JavaScript adalah asas kepada pembangunan web moden, dan fungsi utamanya termasuk pengaturcaraan yang didorong oleh peristiwa, penjanaan kandungan dinamik dan pengaturcaraan tak segerak. 1) Pengaturcaraan yang didorong oleh peristiwa membolehkan laman web berubah secara dinamik mengikut operasi pengguna. 2) Penjanaan kandungan dinamik membolehkan kandungan halaman diselaraskan mengikut syarat. 3) Pengaturcaraan Asynchronous memastikan bahawa antara muka pengguna tidak disekat. JavaScript digunakan secara meluas dalam interaksi web, aplikasi satu halaman dan pembangunan sisi pelayan, sangat meningkatkan fleksibiliti pengalaman pengguna dan pembangunan silang platform.

Python lebih sesuai untuk sains data dan pembelajaran mesin, manakala JavaScript lebih sesuai untuk pembangunan front-end dan penuh. 1. Python terkenal dengan sintaks ringkas dan ekosistem perpustakaan yang kaya, dan sesuai untuk analisis data dan pembangunan web. 2. JavaScript adalah teras pembangunan front-end. Node.js menyokong pengaturcaraan sisi pelayan dan sesuai untuk pembangunan stack penuh.

JavaScript tidak memerlukan pemasangan kerana ia sudah dibina dalam pelayar moden. Anda hanya memerlukan editor teks dan penyemak imbas untuk memulakan. 1) Dalam persekitaran penyemak imbas, jalankan dengan memasukkan fail HTML melalui tag. 2) Dalam persekitaran Node.js, selepas memuat turun dan memasang node.js, jalankan fail JavaScript melalui baris arahan.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

EditPlus versi Cina retak
Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

SublimeText3 Linux versi baharu
SublimeText3 Linux versi terkini