Saya memiliki komponen yang telah saya buat:
class Create extends Component {
constructor(props) {
super(props);
}
render() {
var playlistDOM = this.renderPlaylists(this.props.playlists);
return (
<div>
{playlistDOM}
</div>
)
}
activatePlaylist(playlistId) {
debugger;
}
renderPlaylists(playlists) {
return playlists.map(playlist => {
return <div key={playlist.playlist_id} onClick={this.activatePlaylist(playlist.playlist_id)}>{playlist.playlist_name}</div>
});
}
}
function mapStateToProps(state) {
return {
playlists: state.playlists
}
}
export default connect(mapStateToProps)(Create);
Ketika saya render
halaman ini, activatePlaylist
dipanggil untuk masing-masing playlist
di saya map
. Jika saya bind
activatePlaylist
suka:
activatePlaylist.bind(this, playlist.playlist_id)
Saya juga dapat menggunakan fungsi anonim:
onClick={() => this.activatePlaylist(playlist.playlist_id)}
lalu berfungsi seperti yang diharapkan. Mengapa ini terjadi?
javascript
reactjs
redux
jhamm
sumber
sumber
React
dengan cara ini. Apakah saya salah mengingat atau sudahapi
berubah?.bind
, seperti yang Anda katakan di langkah 1, perlu melakukan langkah 2? dan jika ya, mengapa? Karena menurut saya ketika Anda menggunakan fungsi panah, konteksnya adalah di mana fungsi itu didefinisikan, tetapi jika kita melampirkan konteks menggunakan.bind
, konteksnya sudah terpasang, bukan?Perilaku ini didokumentasikan ketika React mengumumkan rilis komponen berbasis kelas.
https://facebook.github.io/react/blog/2015/01/27/react-v0.13.0-beta-1.html
sumber
Saya tahu posting ini sudah berumur beberapa tahun, tetapi hanya untuk referensi tutorial / dokumentasi React terbaru tentang kesalahan umum ini (saya juga membuatnya) dari https://reactjs.org/tutorial/tutorial.html :
class Square extends React.Component { render() { return ( <button className="square" onClick={() => alert('click')}> {this.props.value} </button> ); } }
sumber
Cara Anda meneruskan metode
1.this.activatePlaylist(playlist.playlist_id)
, akan segera memanggil metode tersebut. Anda harus meneruskan referensi metode keonClick
acara tersebut. Ikuti salah satu penerapan yang disebutkan di bawah ini untuk menyelesaikan masalah Anda.onClick={this.activatePlaylist.bind(this,playlist.playlist_id)}
Di sini properti bind digunakan untuk membuat referensi
2.this.activatePlaylist
metode dengan meneruskanthis
konteks dan argumenplaylist.playlist_id
onClick={ (event) => { this.activatePlaylist.(playlist.playlist_id)}}
Ini akan melampirkan fungsi ke acara onClick yang akan dipicu hanya pada tindakan klik pengguna. Ketika kode ini keluar,
this.activatePlaylist
metode akan dipanggil.sumber