J'ai un composant que j'ai créé:
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);
Lorsque je render
cette page, activatePlaylist
est appelé pour chacun playlist
dans mon map
. Si bind
activatePlaylist
j'aime:
activatePlaylist.bind(this, playlist.playlist_id)
Je peux également utiliser une fonction anonyme:
onClick={() => this.activatePlaylist(playlist.playlist_id)}
alors cela fonctionne comme prévu. Pourquoi cela arrive-t-il?
javascript
reactjs
redux
jhamm
la source
la source
React
cette façon. Est-ce que je me souviens mal ou a-api
t-il changé?.bind
, comme vous le dites à l'étape 1, il est nécessaire de faire l'étape 2? et si c'est le cas, pourquoi? Parce que je pense que lorsque vous utilisez la fonction de flèche, le contexte est celui dans lequel la fonction a été définie, mais si nous attachons le contexte en utilisant.bind
, le contexte est déjà attaché, non?Ce comportement a été documenté lorsque React a annoncé la sortie de composants basés sur les classes.
https://facebook.github.io/react/blog/2015/01/27/react-v0.13.0-beta-1.html
la source
Je sais que cet article a déjà quelques années, mais juste pour faire référence au dernier tutoriel / documentation React sur cette erreur courante (je l'ai fait aussi) à partir de https://reactjs.org/tutorial/tutorial.html :
la source
La façon dont vous transmettez la méthode
1.this.activatePlaylist(playlist.playlist_id)
appellera la méthode immédiatement. Vous devez transmettre la référence de la méthode à l'onClick
événement. Suivez l'une des implémentations mentionnées ci-dessous pour résoudre votre problème.Ici, la propriété bind est utilisée pour créer une référence de la
2.this.activatePlaylist
méthode en passant lethis
contexte et l'argumentplaylist.playlist_id
Cela attachera une fonction à l'événement onClick qui sera déclenché uniquement par l'action de clic de l'utilisateur. Lorsque ce code sera exécuté, la
this.activatePlaylist
méthode sera appelée.la source