2017-09-26 116 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 }); 
}