Rumah > hujung hadapan web > tutorial js > Bagaimana untuk Mengelakkan Isu Prestasi Apabila Mengikat atau Menggariskan Fungsi Anak Panah dalam Kaedah Render React?

Bagaimana untuk Mengelakkan Isu Prestasi Apabila Mengikat atau Menggariskan Fungsi Anak Panah dalam Kaedah Render React?

Linda Hamilton
Lepaskan: 2024-11-15 10:35:02
asal
582 orang telah melayarinya

How to Avoid Performance Issues When Binding or Inlining Arrow Functions in React's Render Method?

Cara Mengelakkan Fungsi Anak Panah Bind atau Inline Di Dalam Kaedah Render

Dalam komponen React, adalah penting untuk mengelakkan fungsi anak panah mengikat atau menyelaras dalam kaedah pemaparan untuk mengoptimumkan prestasi . Semasa pemaparan semula, kaedah baharu dicipta dan bukannya menggunakan semula yang lama, mengakibatkan isu prestasi.

Pertimbangkan contoh berikut:

<input onChange={this._handleChange.bind(this)} />
Salin selepas log masuk

Untuk menangani perkara ini, kami boleh mengikat _handleChange kaedah dalam pembina:

constructor(props) {
  super(props);
  this._handleChange = this._handleChange.bind(this);
}
Salin selepas log masuk

Atau, sebagai alternatif, kita boleh menggunakan sintaks pemula sifat:

_handleChange = () => {};
Salin selepas log masuk

Walau bagaimanapun, cabaran timbul apabila kita perlu menghantar parameter tambahan kepada pengendali onClick . Contohnya, dalam apl todo, kita mungkin perlu memadamkan item daripada tatasusunan berdasarkan indeks atau namanya.

todos.map(el => <div key={el} onClick={this._deleteTodo.bind(this, el)}>{el}</div>)
Salin selepas log masuk

Pendekatan ini mencipta panggilan balik baharu dengan setiap pemaparan komponen, seperti yang dinyatakan dalam dokumentasi .

Alternatif untuk Mengikat Di Dalam Kaedah Render

1. Cipta Komponen Kanak-kanak:

Alihkan kandungan di dalam fungsi peta ke komponen anak yang berasingan dan hantar nilai sebagai prop. Dengan cara ini, fungsi boleh dipanggil daripada komponen anak dan menghantar nilai kepada fungsi yang diturunkan sebagai prop.

Ibu bapa:

deleteTodo = (val) => {
  console.log(val);
};

todos.map((el) => <MyComponent val={el} onClick={this.deleteTodo} />);
Salin selepas log masuk

Komponen Kanak-Kanak (Komponen Saya):

class MyComponent extends React.Component {
  deleteTodo = () => {
    this.props.onClick(this.props.val);
  };

  render() {
    return <div onClick={this.deleteTodo}>{this.props.val}</div>;
  }
}
Salin selepas log masuk

Contoh Coretan:

class Parent extends React.Component {
  _deleteTodo = (val) => {
    console.log(val);
  };

  render() {
    var todos = ['a', 'b', 'c'];
    return (
      <div>
        {todos.map((el) => (
          <MyComponent key={el} val={el} onClick={this._deleteTodo} />
        ))}
      </div>
    );
  }
}

class MyComponent extends React.Component {
  _deleteTodo = () => {
    console.log('here');
    this.props.onClick(this.props.val);
  };

  render() {
    return <div onClick={this._deleteTodo}>{this.props.val}</div>;
  }
}

ReactDOM.render(<Parent />, document.getElementById('app'));
Salin selepas log masuk

Dengan melaksanakan alternatif ini, kita boleh mengelakkan fungsi anak panah mengikat atau menyebaris di dalam kaedah render, memastikan prestasi yang betul dan kebolehgunaan semula komponen.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Isu Prestasi Apabila Mengikat atau Menggariskan Fungsi Anak Panah dalam Kaedah Render React?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan