![](/img/trans.png)
[英]How to change color of text in text area using button in react function
[英]How to Change Button text in React using useState
我有一个带有 Text Click View Price
的按钮。 单击按钮时,我正在显示Amount
。
我想将按钮值更改为priceVar = "Reset Price";
这在我的情况下没有发生。 我可以将值设置为 0。
如何将按钮文本再次设置为Reset Price
?
const [price, setPrice] = useState(0);
let priceVar = "Click View Price";
const viewPrice = () => {
if (price === 0) {
setPrice(Math.floor(Math.random() * 100));
} else {
priceVar = "Reset Price"; --------------------> NOT WORKING
setPrice(0);
}
};
return (
<article
className="book"
onMouseOver={() => {
console.log(title);
}}
>
<div>
<button type="button" onClick={viewPrice()}>
{priceVar}
</button>
<h3>${price}</h3>
</div>
</article>
);
您可以为按钮文本创建useState hook
,如下所示
const [priceVar, setpriceVar] = useState("Click View Price");
const viewPrice = () => {
if (price === 0) {
setpriceVar("Click View Price");
setPrice(Math.floor(Math.random() * 100));
} else {
setpriceVar("Reset Price");
setPrice(0);
}
};
你的变量不是反应状态!
import { useState } from "react"; let priceVar = "..."; // Try useState like with your price variable: const [priceVarNew, setPriceVarNew] = useState("Click View Price") // Then reference that state like your price with: {priceVar}, or change it accordingly with setState("Reset Price")
您也可以为此制作三元。 setPrice(price === 0? Math.floor(Math.random() * 100): 0);
你几乎拥有它!
您当前的代码具有以下流程:
priceVar
在 React 中,组件的渲染(更新)由 props 或 state 更改触发,在这种情况下,您的按钮文本不是由 state 直接触发的。 setPrice
确实触发了重新渲染,这几乎间接地是您想要的,但是因为您在组件顶部声明了文本,所以您只是要求您的组件再次呈现相同的文本,因此没有更改。
有很多方法可以实现这一目标。 但是在您的情况下,当您的priceVar
可变price
等于 0 时,您似乎希望您的按钮文本为Reset Price
文本。 如下图所示:
<button type="button" onClick={viewPrice()}>
{price === 0 ? "Reset Price" : "Click view price"}
</button>
有一些方法可以清理它或更优雅,但这里要注意的重要一点是,你依赖于一些反应 state,这在组件 UI 需要随不同情况发生变化的场景中至关重要。
您非常接近,您只需要了解您无法使用let
或const
创建有状态的值。 这就是为什么我们有像useState
、 useRef
、 useReducer
等这样的设置器,它们在渲染中保持它们的值。 标准变量不会按您预期的方式工作。
因此,您可以选择通过替换来创建一个新的 state:
let priceVar = "Click View Price";
和:
const [priceVar, setPriceVar] = useState("Click View Price");
并相应地更新它。
或者,阅读本文以了解何时应该派生 state,而不是同步它。
在您的情况下,该行:
let priceVar = "Click View Price";
将被替换为:
const priceVar = price === 0 ? "Click View Price" : "Reset Price";
另外作为旁注,您在组件呈现后立即调用viewPrice
function,这不是您想要做的。 这是有道理的,因为如果您要在原版 JavaScript 中调用 function,您将遵循以下模式: someFunction()
并期望它被调用。
相反,将您的 onClick 处理程序替换为:
onClick={viewPrice}
或者:
onClick={() => viewPrice()}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.