"; 2. Gunakan komponen induk rujukan untuk memanggil fungsi komponen anak; 3. Hantar data kepada anak melalui ibu bapa, dan anak itu hanya bertanggungjawab untuk pemaparan."/> "; 2. Gunakan komponen induk rujukan untuk memanggil fungsi komponen anak; 3. Hantar data kepada anak melalui ibu bapa, dan anak itu hanya bertanggungjawab untuk pemaparan.">

Rumah >hujung hadapan web >Soal Jawab bahagian hadapan >Apakah kaedah untuk bertindak balas terhadap keadaan kemas kini?

Apakah kaedah untuk bertindak balas terhadap keadaan kemas kini?

藏色散人
藏色散人asal
2022-11-09 15:31:031974semak imbas

Kaedah kemas kini keadaan React ialah: 1. Tukar subkomponen melalui kunci, kod seperti "1492b41c09660c2b4632e7ee0f654c12”;

Apakah kaedah untuk bertindak balas terhadap keadaan kemas kini?

Persekitaran pengendalian tutorial ini: sistem Windows 7, bertindak balas versi 17.0.1, komputer Dell G3.

Apakah kaedah untuk mengemas kini keadaan dalam React?

Banyak cara untuk mengemas kini keadaan anak apabila prop ibu bapa berubah dalam React

Sub-komponen:

class Children extends Component {
  constructor(props) {
     super(props);
     this.state = {
       a: this.props.a,
       b: this.props.b,
       treeData: '',
       targets: '',
     }
    }
  componentDidMount() {
   const { a, b } = this.state
   const data = {a,b}
   fetch('/Url', {
     data
   }).then(res => {
   if (res.code === 0) {
     this.setState({
     treeData: res.a,
     targets: res.b,
  })
  } else {
   message.error(res.errmsg)
  }
  })
  }
 test(item1, item2) {
   const data = { item1, item2 }
   fetch('/Url', {data}).then(res => {
     if (res.code === 0) {
       this.setState({
         treeData: res.a,
         targets: res.b,
       })
     } else {
       message.error(res.errmsg)
     }
   })
 }
}
export default Children

Kaedah 1: Penggunaan kunci yang bijak

<Children key={this.state.key} a={this.state.a} b={this.state.b} /> //父组件调用子组件

Kaedah ini ialah subkomponen akan dibuat semula apabila kunci berubah (kunci perubahan dalam React akan memusnahkan komponen Menghidupkan semula komponen)

Kaedah 2: Gunakan komponen induk ref untuk memanggil fungsi subkomponen (tidak mematuhi spesifikasi reka bentuk tindak balas, tetapi ia boleh dianggap sebagai escape hatch~)

class father extends Component {
    constructer(props) {
      super(props);
      this.state={
       a: &#39;1&#39;,
       b: &#39;2&#39;,
      }
      this.myRef
      this.test = this.test.bind(this)
    }
   change() {
     const { a,b } = this.state
     console.log(this.myRef.test(a,b)) // 直接调用实例化后的Children组件对象里函数
    }
render() {
 <Children wrappedComponentRef={(inst) => { this.myRef = inst } } ref={(inst) => { this.myRef = inst } } />  
 <button onClick={this.test}>点击</button>
}
}

Nota : wrappedComponentRef digunakan dalam react-router v4 untuk menyelesaikan masalah bahawa komponen tertib tinggi tidak dapat memperoleh ref dengan betul (komponen bukan pesanan tinggi perlu dikeluarkan)

Kaedah 3: Ibu bapa menghantar data kepada anak, dan anak hanya bertanggungjawab untuk membuat (Paling konsisten dengan konsep reka bentuk tindak balas) Disyorkan! !

Komponen induk:

class father extends Component {
    constructer(props) {
      super(props);
      this.state={
       a:&#39;1&#39;,
       b:&#39;2&#39;,
       data:&#39;&#39;,
      }
    }
  getcomposedata() {
    const { a, b } = this.state
    const data = { a, b }
    fetch(&#39;/Url&#39;, {data}).then(res => {
      if (res.code === 0) {
        this.setState({
          data:res.data
        })
      } else {
        message.error(res.errmsg)
      }
    })
  }
render() {
 <Children data={this.state.data}} />  
}
}

Komponen anak:

  componentWillReceiveProps(nextProps) {
    const { data } = this.state
    const newdata = nextProps.data.toString()
    if (data.toString() !== newdata) {
      this.setState({
        data: nextProps.data,
      })
    }
  }

Nota: Kitaran componentWillReceiveProps React menggunakan prop yang diubah untuk menilai dan mengemas kini keadaannya sendiri

Pembelajaran yang disyorkan: "tutorial video bertindak balas"

Atas ialah kandungan terperinci Apakah kaedah untuk bertindak balas terhadap keadaan kemas kini?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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