Jadual Kandungan
Dalam komponen kelas
2. Pengisytiharan fungsi ref
3 Gunakan prop untuk menyesuaikan atribut onRef
Komponen fungsi, komponen Cangkuk
1. useImperativeHandle
2. forwardRef
Rumah hujung hadapan web Soal Jawab bahagian hadapan Cara memanggil kaedah komponen anak dalam komponen induk React

Cara memanggil kaedah komponen anak dalam komponen induk React

Dec 27, 2022 pm 07:01 PM
hujung hadapan react.js

Kaedah panggilan: 1. Panggilan dalam komponen kelas boleh dilaksanakan menggunakan React.createRef(), pengisytiharan fungsi ref atau props atribut onRef tersuai 2. Panggilan dalam komponen fungsi dan komponen Hook boleh dilaksanakan menggunakan UseImperativeHandle atau forwardRef membuang ref komponen kanak-kanak untuk mencapai ini.

Cara memanggil kaedah komponen anak dalam komponen induk React

Persekitaran pengendalian tutorial ini: sistem Windows 7, versi react18, komputer Dell G3.

Dalam React, kami sering memanggil kaedah komponen induk dalam komponen anak, biasanya menggunakan panggil balik props. Tetapi kadangkala ia juga perlu untuk memanggil kaedah komponen kanak-kanak dalam komponen induk untuk mencapai perpaduan yang tinggi. Terdapat banyak kaedah, ambil mengikut keperluan.

Dalam komponen kelas


1 React.createRef()

  • <.>Kelebihan: Mudah difahami, tunjuk dengan ref.

  • Kelemahan: subkomponen menggunakan HOC tidak tersedia dan tidak boleh menunjuk kepada subkomponen sebenar

    Sebagai contoh, beberapa kaedah penulisan biasa, subkomponen yang dibalut oleh @observer of mobx bukan This kaedah terpakai.

import React, { Component } from &#39;react&#39;;

class Sub extends Component {
  callback() {
    console.log(&#39;执行回调&#39;);
  }
  render() {
    return <div>子组件</div>;
  }
}

class Super extends Component {
  constructor(props) {
    super(props);
    this.sub = React.createRef();
  }
  handleOnClick() {
    this.sub.callback();
  }
  render() {
    return (
      <div>
        <Sub ref={this.sub}></Sub>
      </div>
    );
  }
}
Salin selepas log masuk

2. Pengisytiharan fungsi ref

    Kelebihan: penulisan ref adalah mudah
  • Kelemahan: Subkomponen menggunakan HOC tidak tersedia dan tidak boleh menunjuk ke subkomponen sebenar (sama seperti di atas)
Kaedah penggunaan adalah sama seperti di atas, tetapi cara mentakrifkan ref adalah berbeza.

...

<Sub ref={ref => this.sub = ref}></Sub>

...
Salin selepas log masuk

3 Gunakan prop untuk menyesuaikan atribut onRef

    Kelebihan: Jika sub-komponen bersarang dengan HOC, ia juga boleh menunjuk ke subkomponen sebenar.
  • Kelemahan: Perlu menyesuaikan atribut props
import React, { Component } from &#39;react&#39;;
import { observer } from &#39;mobx-react&#39;

@observer
class Sub extends Component {
	componentDidMount(){
    // 将子组件指向父组件的变量
		this.props.onRef && this.props.onRef(this);
	}
	callback(){
		console.log("执行我")
	}
	render(){
		return (<div>子组件</div>);
	}
}

class Super extends Component {
	handleOnClick(){
       // 可以调用子组件方法
		this.Sub.callback();
	}
	render(){
		return (
          <div>
			<div onClick={this.handleOnClick}>click</div>
			<Sub onRef={ node => this.Sub = node }></Sub>	
	   	  </div>)
	}
}
Salin selepas log masuk

Komponen fungsi, komponen Cangkuk


1. useImperativeHandle

    Kelebihan: 1. Kaedah penulisan yang ringkas dan mudah difahami. 2. Jika subkomponen mempunyai HOC bersarang, ia juga boleh menunjuk kepada subkomponen sebenar
  • Kelemahan: 1. Perlu menyesuaikan atribut props 2. Perlu menyesuaikan kaedah terdedah
import React, { useImperativeHandle } from &#39;react&#39;;
import { observer } from &#39;mobx-react&#39;


const Parent = () => {
  let ChildRef = React.createRef();

  function handleOnClick() {
    ChildRef.current.func();
  }

  return (
    <div>
      <button onClick={handleOnClick}>click</button>
      <Child onRef={ChildRef} />
    </div>
  );
};

const Child = observer(props => {
  //用useImperativeHandle暴露一些外部ref能访问的属性
  useImperativeHandle(props.onRef, () => {
    // 需要将暴露的接口返回出去
    return {
      func: func,
    };
  });
  function func() {
    console.log(&#39;执行我&#39;);
  }
  return <div>子组件</div>;
});

export default Parent;
Salin selepas log masuk

2. forwardRef

Gunakan forwardRef untuk membuang ref subkomponen

ini Kaedah ini sebenarnya lebih sesuai untuk HOC tersuai. Tetapi masalahnya ialah denganRouter, connect, Form.create dan kaedah lain tidak boleh membuang ref Jika Child sendiri perlu menyarangkan kaedah ini, maka ia pada dasarnya tidak boleh digunakan bersama. forwardRef sendiri juga digunakan untuk membuang ref elemen kanak-kanak, seperti input dan elemen asli yang lain Ia tidak sesuai untuk melontar ref komponen kerana senario penggunaan komponen terlalu kompleks.

import React, { useRef, useImperativeHandle } from &#39;react&#39;;
import ReactDOM from &#39;react-dom&#39;;
import { observer } from &#39;mobx-react&#39;

const FancyInput = React.forwardRef((props, ref) => {
  const inputRef = useRef();
  useImperativeHandle(ref, () => ({
    focus: () => {
      inputRef.current.focus();
    }
  }));

  return <input ref={inputRef} type="text" />
});

const Sub = observer(FancyInput)

const App = props => {
  const fancyInputRef = useRef();

  return (
    <div>
      <FancyInput ref={fancyInputRef} />
      <button
        onClick={() => fancyInputRef.current.focus()}
      >父组件调用子组件的 focus</button>
    </div>
  )
}

export default App;
Salin selepas log masuk
Ringkasan

Terdapat dua situasi apabila komponen induk memanggil fungsi subkomponen

    Subkomponen tidak mempunyai sarang HOC: ia adalah disyorkan untuk menggunakan ref untuk memanggil terus
  • Dengan HOC bersarang: adalah disyorkan untuk menggunakan prop tersuai
[Cadangan berkaitan:

Tutorial video Redis, Pengajaran pengaturcaraan]

Atas ialah kandungan terperinci Cara memanggil kaedah komponen anak dalam komponen induk React. 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

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

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Artikel tentang kawalan memori dalam Node Artikel tentang kawalan memori dalam Node Apr 26, 2023 pm 05:37 PM

Perkhidmatan Node yang dibina berdasarkan bukan sekatan dan dipacu peristiwa mempunyai kelebihan penggunaan memori yang rendah dan sangat sesuai untuk mengendalikan permintaan rangkaian besar-besaran. Di bawah premis permintaan besar-besaran, isu yang berkaitan dengan "kawalan memori" perlu dipertimbangkan. 1. Mekanisme kutipan sampah V8 dan had ingatan Js dikawal oleh mesin kutipan sampah

Terokai cara menulis ujian unit dalam Vue3 Terokai cara menulis ujian unit dalam Vue3 Apr 25, 2023 pm 07:41 PM

Vue.js telah menjadi rangka kerja yang sangat popular dalam pembangunan bahagian hadapan hari ini. Memandangkan Vue.js terus berkembang, ujian unit menjadi semakin penting. Hari ini kita akan meneroka cara menulis ujian unit dalam Vue.js 3 dan menyediakan beberapa amalan terbaik serta masalah dan penyelesaian biasa.

Mari bercakap secara mendalam tentang modul Fail dalam Node Mari bercakap secara mendalam tentang modul Fail dalam Node Apr 24, 2023 pm 05:49 PM

Modul fail ialah enkapsulasi operasi fail asas, seperti membaca/menulis/membuka/menutup/memadam fail, dsb. Ciri terbesar modul fail ialah semua kaedah menyediakan dua versi **segerak** dan ** asynchronous**, dengan Kaedah dengan akhiran penyegerakan adalah semua kaedah penyegerakan, dan kaedah yang tidak semuanya adalah kaedah heterogen.

Bagaimana untuk menyelesaikan isu merentas domain? Analisis ringkas penyelesaian biasa Bagaimana untuk menyelesaikan isu merentas domain? Analisis ringkas penyelesaian biasa Apr 25, 2023 pm 07:57 PM

Cross-domain ialah senario yang sering dihadapi dalam pembangunan, dan ia juga merupakan isu yang sering dibincangkan dalam temu bual. Menguasai penyelesaian merentas domain biasa dan prinsip di sebaliknya bukan sahaja boleh meningkatkan kecekapan pembangunan kami, tetapi juga menunjukkan prestasi yang lebih baik dalam temu duga.

PHP dan Vue: gandingan sempurna alat pembangunan bahagian hadapan PHP dan Vue: gandingan sempurna alat pembangunan bahagian hadapan Mar 16, 2024 pm 12:09 PM

PHP dan Vue: gandingan sempurna alat pembangunan bahagian hadapan Dalam era perkembangan pesat Internet hari ini, pembangunan bahagian hadapan telah menjadi semakin penting. Memandangkan pengguna mempunyai keperluan yang lebih tinggi dan lebih tinggi untuk pengalaman tapak web dan aplikasi, pembangun bahagian hadapan perlu menggunakan alat yang lebih cekap dan fleksibel untuk mencipta antara muka yang responsif dan interaktif. Sebagai dua teknologi penting dalam bidang pembangunan bahagian hadapan, PHP dan Vue.js boleh dianggap sebagai alat yang sempurna apabila digandingkan bersama. Artikel ini akan meneroka gabungan PHP dan Vue, serta contoh kod terperinci untuk membantu pembaca memahami dan menggunakan kedua-dua ini dengan lebih baik.

Ketahui lebih lanjut tentang Penampan dalam Node Ketahui lebih lanjut tentang Penampan dalam Node Apr 25, 2023 pm 07:49 PM

Pada mulanya, JS hanya berjalan pada bahagian penyemak imbas Mudah untuk memproses rentetan berkod Unikod, tetapi sukar untuk memproses rentetan binari dan bukan berkod Unikod. Dan binari ialah format data peringkat terendah komputer, video/audio/program/pakej rangkaian

Bagaimana untuk menggunakan bahasa Go untuk pembangunan bahagian hadapan? Bagaimana untuk menggunakan bahasa Go untuk pembangunan bahagian hadapan? Jun 10, 2023 pm 05:00 PM

Dengan perkembangan teknologi Internet, pembangunan front-end telah menjadi semakin penting. Terutamanya populariti peranti mudah alih memerlukan teknologi pembangunan bahagian hadapan yang cekap, stabil, selamat dan mudah diselenggara. Sebagai bahasa pengaturcaraan yang berkembang pesat, bahasa Go telah digunakan oleh semakin ramai pembangun. Jadi, adakah boleh menggunakan bahasa Go untuk pembangunan bahagian hadapan? Seterusnya, artikel ini akan menerangkan secara terperinci cara menggunakan bahasa Go untuk pembangunan bahagian hadapan. Mari kita lihat dahulu mengapa bahasa Go digunakan untuk pembangunan bahagian hadapan. Ramai orang berpendapat bahawa bahasa Go ialah a

Perkongsian pengalaman pembangunan C#: kemahiran pembangunan kolaboratif bahagian hadapan dan belakang Perkongsian pengalaman pembangunan C#: kemahiran pembangunan kolaboratif bahagian hadapan dan belakang Nov 23, 2023 am 10:13 AM

Sebagai pembangun C#, kerja pembangunan kami biasanya merangkumi pembangunan bahagian hadapan dan bahagian belakang Apabila teknologi berkembang dan kerumitan projek meningkat, pembangunan kolaboratif bahagian hadapan dan bahagian belakang menjadi semakin penting dan kompleks. Artikel ini akan berkongsi beberapa teknik pembangunan kolaboratif bahagian hadapan dan belakang untuk membantu pembangun C# menyelesaikan kerja pembangunan dengan lebih cekap. Selepas menentukan spesifikasi antara muka, pembangunan kolaboratif bahagian hadapan dan belakang tidak dapat dipisahkan daripada interaksi antara muka API. Untuk memastikan pembangunan kolaboratif bahagian hadapan dan belakang yang lancar, perkara yang paling penting ialah menentukan spesifikasi antara muka yang baik. Spesifikasi antara muka melibatkan nama antara muka

See all articles