Pourquoi mon onClick sur le rendu? - React.js
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);
Quand je render
cette page, activatePlaylist
est appelée pour chaque playlist
dans mon map
. Si je bind
activatePlaylist
comme:
activatePlaylist.bind(this, playlist.playlist_id)
Je peux aussi utiliser une fonction anonyme:
onClick={() => this.activatePlaylist(playlist.playlist_id)}
alors qu'il fonctionne comme prévu. Pourquoi est-ce arrivé?
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de la passer à
onClick
référence de fonction, quand vous aimez ceactivatePlaylist( .. )
vous appelez la fonction et passer àonClick
valeur retournée deactivatePlaylist
. Vous pouvez utiliser une de ces trois options:1. à l'aide de
.bind
2. à l'aide de la flèche de la fonction
3. ou de retour de la fonction à partir de
activatePlaylist
React
de cette façon. Suis-je de rappeler tort ou a laapi
changé?.bind
, comme vous le dites dans l'étape 1, il est nécessaire de faire l'étape 2? et si elle l'est, pourquoi? Parce que je pense que lorsque vous utilisez la flèche de la fonction, le contexte est celle qui est où la fonction a été définie, mais si nous sommes d'attacher le cadre à l'aide de.bind
, le contexte est déjà attaché, non?.bind
, et l'envoi de la méthode vers le bas pour un composant à l'aide d'accessoires. Puis, en le composant, Si je l'appelle comme ceci:onClick={props.myMethod()
, la méthode qu'il appelle automatiquement sans rien faire, et un nombre infini de fois. Seulement fonctionne très bien si je l'appelle la méthode à l'aide de flèche plate, donc dans ce cas n'est pas nécessaire de lier le contexte avec.bind
Ce comportement a été documenté lors de Réagir annoncé la sortie de la classe de base de composants.
https://facebook.github.io/react/blog/2015/01/27/react-v0.13.0-beta-1.html
Je sais que ce post est vieux de quelques années déjà, mais juste pour faire référence à la dernière Réagir tutoriel/documentation sur cette erreur (je l'ai fait aussi) de https://reactjs.org/tutorial/tutorial.html:
La façon dont vous transmettant la méthode de "ce.activatePlaylist(liste de lecture.playlist_id)" , qui fera appel à la méthode immédiatement. Vous devez passer la référence de la méthode à l'événement onClick. Suivez l'une de l'mentionnés ci-dessous mise en œuvre pour résoudre votre problème.
Ici lier la propriété est utilisée pour créer une référence de la " ce.activatePlaylist méthode' en passant 'ce' contexte et l'argument " liste de lecture.playlist_id'
Cela permettra d'affecter une fonction à l'événement onClick qui sera déclenché à l'utilisateur de cliquer sur l'action uniquement. Lorsque ce code exectues le " cette.activatePlaylist méthode sera appelée.