2017-09-26 56 views
0

从ResultsTable按钮单击我收到处理ClickClick函数所需的值,但setState未设置gameId并保持“”,我错在哪里?如果我控制台登录gameId,这是我想要的。感谢您的任何帮助。React setState函数不会更改值

class ResultsTableContainer extends Component { 
constructor(props) { 
super(props); 

this.state = { 
    tableConfig, 
    games: [], 
    gameId: "" 
}; 
} 

handleClick = event => { 
event.preventDefault(); 
const gameId = event.target.id; 
this.setState({ gameId }); 
console.log(this.state); 
}; 

currentContent =() => { 
if (this.state.gameId !== "") { 
    return <GameDetailsContainer gameId={this.state.gameId} />; 
} 

return (
    <ResultsTable 
    tableConfig={this.state.tableConfig} 
    games={this.state.games} 
    onButtonClick={this.handleClick} 
    /> 
); 
}; 
render() { 
return <div>{this.currentContent()}</div>; 
    } 
} 

export default ResultsTableContainer; 

ResultsTable.jsx

const ResultsTable = ({ games, tableConfig, onButtonClick }) => (
<Table> 
    ... 
<TableBody> 
    {games.map((game, index) => (
    ... 
     <button> 
      <Link 
      to={`/games/${game.id}`} 
      onClick={onButtonClick} 
      id={game.id} 
      > 
      Results 
      </Link> 
     </button> 
</TableBody> 
</Table> 
); 
export default ResultsTable; 
+0

你需要绑定你的'handleClick'功能之后不要叫控制台。这是最常见的反应错误。 – jmargolisvt

+1

@jmargolisvt:OP似乎在做这件事。他们正在使用带有箭头功能的* class字段*提案。 –

+3

状态没有立即更新,所以'this.setState({gameId}); console.log(this.state);'会记录旧的状态。做'this.setState({gameId},()=> console.log(this.state));'而是。 –

回答

0

不要CONSOLE.LOG的setState后(州)中庸之道。 我认为一切正常。

0

的setState

handleClick = event => { 
    event.preventDefault(); 
    const gameId = event.target.id; 
    this.setState({ gameId }); 
}