javascript - 无法在 React 中使用 useState 动态设置文本字符串
问题描述
谁能告诉我为什么这不起作用?
export default function App() {
const [buttonStatus, setButtonStatus] = useState('rts');
const [buttonName, setButtonName] = useState('RTS / MPC DSP');
const switchButtons = (x) => {
setButtonStatus(x);
};
const displayButtons = () => {
if (buttonStatus === 'rts') {
setButtonName('RTS / MPC DSP');
return <RTSButtons />;
} else if (buttonStatus === 'rtb') {
setButtonName('RTB');
return <RTBButtons />;
} else if (buttonStatus === 'mpc') {
setButtonName('MPC');
return <MPCButtons />;
}
};
我想在setButtonName
这里用来调整按钮集合的名称:
<h2 className='font-bold text-2xl capitalize -mb-10 mt-2'>{buttonName}</h2>
但似乎在满足条件时有时会出现空白屏幕或无限循环错误消息。是不是因为我应该做
return <RTSButtons />, setButtonName('RTS / MPC DSP')
这有可能吗?
解决方案
在 React 中,修改状态(例如你的setButtonName
调用)和渲染组件(React(间接)调用App()
)需要分开。如果在渲染过程中尝试修改状态,React 确实会抛出错误。
在您的情况下,您可以buttomName
在渲染期间进行计算,而无需将其存储在状态变量中:
export default function App() {
const [buttonStatus, setButtonStatus] = useState('rts');
const switchButtons = (x) => {
setButtonStatus(x);
};
let buttonName = 'RTS / MPC DSP';
let buttons;
if (buttonStatus === 'rts') {
buttonName = 'RTS / MPC DSP';
buttons = <RTSButtons />;
} else if (etc) {
// ... etc
}
// Example usage
return <>
<h2 className='font-bold text-2xl capitalize -mb-10 mt-2'>{buttonName}</h2>
{buttons}
</>;
}
推荐阅读
- python - 在 flask_restplus python3 中使用 fields.Wildcard() 的问题
- android - 即使观察者活动被破坏,MutableLiveData 也会保留旧值
- google-apps-script - 一旦数据验证显示“已保存”部分,“保存”工作表部分将再次显示
- reactjs - 如何使用酶测试自定义 useFetch 钩子
- gnuplot - 如何将 gnuplot 输出替换为 PSQL 内部的图像(保持打开状态)输出?
- android - 从操作栏中删除阴影 - kotlin
- java - 如何在java中修复while循环的条件
- angular - 防止 Angular 中出现多个应用程序选项卡
- ios - 参数类型不符合预期类型
- excel - 有没有办法通过 Scala/Spark 应用程序中的 Apache POI 设置 Excel 文件的样式?