微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 React 钩子 useState 将两个单击处理程序添加到 1 个函数

如何解决使用 React 钩子 useState 将两个单击处理程序添加到 1 个函数

我有一个添加到购物车”按钮,我希望它在点击时做两件事。我希望它向购物车添加一个项目,我还希望它在 1 秒内将文本更改为“已添加”。

问题是如果我调用 onClick 两次,第二个函数会覆盖第一个

如果我将两个单击处理程序放入 1 个函数中,然后在 1 个 onClick 中调用函数,则只有将内容添加到购物车的函数才有效。

我哪里出错了?

const [variant,setvariant] = useState({ ...initialVariant })
const [quantity,setQuantity] = useState(1)

const {
    addVariantToCart,store: { client,adding },} = useContext(StoreContext)

const handleAddToCart = () => {
    addVariantToCart(productvariant.shopifyId,quantity)
  }

const text = "Add To Cart";
  const [buttonText,setButtonText] = useState(text);
  useEffect(() => {
    const timer = setTimeout(() => {
      setButtonText(text);
    },1000);
    return () => clearTimeout(timer);
  },[buttonText])

const handleClick = () => {
    setButtonText("Added");
    handleAddToCart();
  }

return (
    <>
      <button
        className="add"
        type="submit"
        disabled={!available || adding}
        onClick={handleClick}
      >
        Add to Cart
      </button>
      {!available && <p>This Product is out of Stock!</p>}
    </>

解决方法

您需要在 buttonText 中使用 button,如下所示,但是,在您的代码中,您使用了硬文本 Add to Cart

<button
        className="add"
        type="submit"
        disabled={!available || adding}
        onClick={handleClick}
      >
        {buttonText}
      </button>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。