使用 React hooks useState 将两个点击处理程序添加到 1 个函数
Adding Two Click Handlers to 1 Function both using React hooks useState
我有一个“添加到购物车”按钮,我希望它在单击时执行两件事。我希望它向购物车添加商品,我还希望它在 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>}
</>
您需要使用 button
中的 buttonText
如下所示,但是,在您的代码中您使用了硬文本 Add to Cart
.
<button
className="add"
type="submit"
disabled={!available || adding}
onClick={handleClick}
>
{buttonText}
</button>
我有一个“添加到购物车”按钮,我希望它在单击时执行两件事。我希望它向购物车添加商品,我还希望它在 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>}
</>
您需要使用 button
中的 buttonText
如下所示,但是,在您的代码中您使用了硬文本 Add to Cart
.
<button
className="add"
type="submit"
disabled={!available || adding}
onClick={handleClick}
>
{buttonText}
</button>