class PicksLeaderboard extends React.Component { renderPlayerRow ({name, score}) { return ( <tr> <td> <b>{name}</b> <button onClick={() => this.props.handleWin(name)}>WIN+1</button> </td> <td>{score}</td> </tr> ); } render () { const players = Object.keys(this.props.data).map(name => { const picks = this.props.data[name]; const score = picks.reduce((score, pick) => score + (pick.win ? 1 : 0), 0); return {name, score}; }); players.sort((a, b) => b.score - a.score); const playerRows = players.map(player => this.renderPlayerRow(player)); return <table>{playerRows}</table>; } } class PicksLeaderboardContainer extends React.Component { constructor(props) { super(props); this.state = { john: [{ win: true }, { win: false }, { win: false }], matt: [{ win: true }, { win: true }, { win: true }], mark: [{ win: false }, { win: true }, { win: true }] }; } handleWin (name) { this.setState({ [name]: [...this.state[name], {win: true}] }); } render () { return <PicksLeaderboard handleWin={name => this.handleWin(name)} data={this.state} />; } } React.render( <PicksLeaderboardContainer />, document.getElementById('root') );