cari
Rumahhujung hadapan webtutorial jsAnalisis 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 ringkas tentang penggunaan fungsi useEffecfa dalam React Hook

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 &#39;react&#39;

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 dalam
sendiri 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;

Bilakah React membersihkan kesannya?添加和移除

React akan melaksanakan operasi pembersihan apabila komponen dikemas kini dan dinyahpasang, membatalkan pemantauan terakhir, hanya meninggalkan pemantauan semasa; 🎜>
Seperti yang dipelajari sebelum ini, kesan dilaksanakan setiap kali ia dipaparkan; >

Salah satu tujuan menggunakan Hook adalah untuk menyelesaikan masalah sering menyatukan banyak logik dalam kitaran hayat kelas :

Sebagai contoh, permintaan rangkaian , pemantauan acara dan pengubahsuaian manual DOM, ini selalunya diletakkan dalam componentDidMount

Cangkuk Kesan Berbilang boleh digunakan dalam komponen fungsi, dan kita boleh memisahkan logik kepada; Kesan kegunaan yang berbeza
import React, { memo, useEffect } from &#39;react&#39;

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 &#39;react&#39;

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 App
Secara 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 &#39;react&#39;

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 &#39;react&#39;

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!

Kenyataan
Artikel ini dikembalikan pada:csdn. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Beyond the Browser: JavaScript di dunia nyataBeyond the Browser: JavaScript di dunia nyataApr 12, 2025 am 12:06 AM

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.

Membina aplikasi SaaS Multi-penyewa dengan Next.js (Integrasi Backend)Membina aplikasi SaaS Multi-penyewa dengan Next.js (Integrasi Backend)Apr 11, 2025 am 08:23 AM

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

Cara Membina Aplikasi SaaS Multi-Tenant dengan Next.js (Integrasi Frontend)Cara Membina Aplikasi SaaS Multi-Tenant dengan Next.js (Integrasi Frontend)Apr 11, 2025 am 08:22 AM

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: meneroka serba boleh bahasa webJavaScript: meneroka serba boleh bahasa webApr 11, 2025 am 12:01 AM

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.

Evolusi JavaScript: Trend Semasa dan Prospek Masa DepanEvolusi JavaScript: Trend Semasa dan Prospek Masa DepanApr 10, 2025 am 09:33 AM

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.

Demystifying JavaScript: Apa yang berlaku dan mengapa pentingDemystifying JavaScript: Apa yang berlaku dan mengapa pentingApr 09, 2025 am 12:07 AM

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.

Adakah Python atau JavaScript lebih baik?Adakah Python atau JavaScript lebih baik?Apr 06, 2025 am 12:14 AM

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.

Bagaimana saya memasang javascript?Bagaimana saya memasang javascript?Apr 05, 2025 am 12:16 AM

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.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

MinGW - GNU Minimalis untuk Windows

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

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini