Context API 不返回被点击元素的 ID

我正在构建一个 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作为一个字符串和一个数组,但都没有返回任何东西。


谁能告诉我哪里出错了?


慕雪6442864
浏览 131回答 1
1回答

慕的地8271018

这是因为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) => {&nbsp; this.setState({&nbsp; &nbsp; chosenSeat: id,&nbsp; &nbsp; remainingSeats: remainingSeats - 1,&nbsp; })&nbsp; console.log(chosenSeat)},
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript