我正在构建一个 React 应用程序,用户可以在其中选择他们想要的门票数量,然后从布局中选择他们的座位。我正在使用适用于各种元素的上下文 API,但我正在尝试返回用户选择的座位ID 。这是具有可点击元素的组件,我需要从中获取 ID -class ChooseSeats extends React.Component { render(){ return(<Context.Consumer> {(context) => { return ( <div> <p>Remaining tickets: {context.state.remainingSeats}</p> <p>Chosen seat: {context.state.chosenSeat}</p> <div> <div id="A1" onClick={context.chooseSeats}> <img src={freeSeat} alt="freeSeat"/> </div> <div id="A2" onClick={context.chooseSeats}> <img src={freeSeat} alt="freeSeat"/> </div> <div id="A3" onClick={context.chooseSeats}> <img src={freeSeat} alt="freeSeat"/> </div> </div> </div> )} } </Context.Consumer> ) }}这是上下文文件 -export class Provider extends React.Component { state = { chosenSeat: " ", remainingSeats: 8 } render() { const { remainingSeats, chosenSeat } = this.state return( <Context.Provider value={{ state: this.state, chooseSeats: (event) => { this.setState({ chosenSeat: event.target.id, remainingSeats: remainingSeats - 1 }) console.log(chosenSeat) }, }}> {this.props.children} </Context.Provider> ) }}在我的实际应用程序中,该remainingSeats值最初取自一些下拉菜单,用户在这些菜单中选择他们的票,但为了简单起见,在这种情况下我只给它一个默认值 8。该choseSeats函数正在运行,因为remainingSeats每次单击一个座位时该值都会减少 1,但它不会返回 的 ID chosenSeat。我试过chosenSeat作为一个字符串和一个数组,但都没有返回任何东西。谁能告诉我哪里出错了?
1 回答
慕的地8271018
TA贡献1796条经验 获得超4个赞
这是因为event.target.id是空的string。尽管您将 附加到onClick(div应该是 abutton以使其可访问),但如果您单击子项img,则event.target是img。
您可以使用event.currentTarget- 它指的是事件处理程序已附加到的元素 ( div) - 或者您可以改为创建内联函数并传递 ID。
所以,而不是
<div id="A3" onClick={context.chooseSeats}><img ...
您可以使用
<button onClick={() => context.chooseSeats('A3')}><img ...
并更新您的chooseSeats,它现在收到一个 ID,而不是event:
chooseSeats: (id) => {
this.setState({
chosenSeat: id,
remainingSeats: remainingSeats - 1,
})
console.log(chosenSeat)
},
添加回答
举报
0/150
提交
取消