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 render
esta página, activatePlaylist
se llama para cada uno playlist
en mi map
. Si me bind
activatePlaylist
gusta
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
React
esta forma. ¿Estoy recordando mal o haapi
cambiado?.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 alonClick
evento. 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.activatePlaylist
método pasandothis
contexto y argumentoplaylist.playlist_id
Esto 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.activatePlaylist
método.fuente