Вы захотите связать контекст, чтобы иметь доступ к классу.Вот как это может выглядеть следующим образом:Я разбил логику просто для удобства чтения.
Кроме того, вы пытались переопределить параметр события с тем же именем, что и переданная переменная - таким образом, "список воспроизведения" был объектом события, а не объектом, который вы ожидали "
onClick={/* this be no good-->*/ (**playlist**) => this.setActivePlaylist(playlist)}
Вы можете увидеть демо здесь: https://stackblitz.com/edit/react-passing-an-object-to-state?file=Playlists.js
import React, { Component } from 'react';
class Playlists extends Component {
constructor(props) {
super(props);
this.state = {
activePlaylist: null
};
// Need to bind the scoped context so we have access to "Playlists" component.
this.renderLink = this.renderLink.bind(this);
}
setActivePlaylist(playlist) {
console.log('From setActivePlaylist');
console.log(playlist.name);
}
render() {
const {items} = this.props.playlists
return(
<div className='playlists'>
<h4 id='playlist-label'>Playlists</h4>
{items
? items.map(this.renderLink)
: <h4>Loading playlists...</h4>
}
</div>
);
}
renderLink(playlist, index) {
return (
<a onClick={() => this.setActivePlaylist(playlist)}>
<h4 key={index}>
{playlist.name}
</h4>
</a>
);
}
}
export default Playlists;
Также убедитесь, что вы связали setActivePlaylist в конструкторе или сделали его функцией стрелки