You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ReactJS onClick多函数调用问题:清空购物车后Toast不显示

解决点击Checkout时同时显示Toast和清空购物车的问题

你的问题核心是**ToastContainer被放在了仅当购物车非空时才渲染的区块里**:调用emptyCart()后,购物车状态变为空,包含ToastContainer的底部操作栏被卸载,导致toast失去了渲染容器,自然无法显示。

修复方案

把<ToastContainer />从条件渲染的区块中移出,放到组件的根容器内,确保它始终存在于DOM中,不受购物车状态影响。

修改后的代码片段

return (
    <Container className="py-4 mt-5">
        <h1 className={`${theme ? 'text-light' : 'text-light-primary'} my-5 text-center`}>
            {isEmpty ? 'Your Cart is Empty' : 'The Cart'}
        </h1>
        <Row className="justify-content-center">
            {/* 表格部分代码保持不变 */}
            <Table responsive="sm" striped bordered hover variant={theme ? 'dark' : 'light'} className="mb-5">
                <tbody>
                    {items.map((item, index) => {
                        return (
                            <tr key={index}>
                                {/* 表格行内容不变 */}
                            </tr>
                        )
                    })}
                </tbody>
            </Table>

            {!isEmpty &&
                <Row
                    style={{ bottom: 0 }}
                    className={`${theme ? 'bg-light-black text-light' : 'bg-light text-balck'} justify-content-center w-100`}
                >
                    <Col className="py-2">
                        <h4>Total Price: $ {cartTotal}</h4>
                    </Col>
                    <Col className="p-0" md={4}>
                        <Button variant="danger"
                            className="m-2"
                            onClick={() => emptyCart()}
                        >
                            <BsCartX size="1.7rem" />
                            Clear Cart
                        </Button>
                        <Button onClick={notify} variant="success" className="m-2">
                            <BsCartCheck size="1.7rem" />
                            Checkout
                        </Button>
                    </Col>
                </Row>}
        </Row>
        {/* 把ToastContainer移到这里,确保始终存在于DOM中 */}
        <ToastContainer />
    </Container>
);

这样修改后,即使emptyCart()触发购物车清空,ToastContainer依然存在,toast消息就能正常显示了。

内容的提问来源于stack exchange,提问作者Ilkin Karimov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 22:12:50