Tengo un componente que he creado:
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);
Cuando hago renderesta página, activatePlaylistse llama para cada uno playlisten mi map. Si me bind activatePlaylistgusta
activatePlaylist.bind(this, playlist.playlist_id)
También puedo usar una función anónima:
onClick={() => this.activatePlaylist(playlist.playlist_id)}
entonces funciona como se esperaba. ¿Por qué pasó esto?
javascript
reactjs
redux
jhamm
fuente
fuente

Reactesta forma. ¿Estoy recordando mal o haapicambiado?.bind, como dice en el paso 1, ¿es necesario realizar el paso 2? y si es así, ¿por qué? Porque creo que cuando usas la función de flecha, el contexto es el que es donde se definió la función, pero si estamos adjuntando el contexto usando.bind, el contexto ya está adjunto, ¿verdad?Este comportamiento se documentó cuando React anunció el lanzamiento de componentes basados en clases.
https://facebook.github.io/react/blog/2015/01/27/react-v0.13.0-beta-1.html
fuente
Sé que esta publicación ya tiene algunos años, pero solo para hacer referencia al último tutorial / documentación de React sobre este error común (yo también lo cometí) de https://reactjs.org/tutorial/tutorial.html :
fuente
La forma en que pasa el método
1.this.activatePlaylist(playlist.playlist_id)llamará al método inmediatamente. Debe pasar la referencia del método alonClickevento. Siga una de las implementaciones mencionadas a continuación para resolver su problema.Aquí la propiedad de vinculación se usa para crear una referencia del
2.this.activatePlaylistmétodo pasandothiscontexto y argumentoplaylist.playlist_idEsto adjuntará una función al evento onClick que se activará solo en la acción de clic del usuario. Cuando este código se ejecute, se llamará al
this.activatePlaylistmétodo.fuente