reactjs - useParams 不适用于 useState(React 挂钩)
问题描述
我试图制作一个具有动态变量的组件,该变量会根据特定路线而变化。我使用 useParams 提取了两个变量,例如 gameName 和 taskNumber。我还设置了状态以使用这两个参数进行快速更改。但是,我没有让它工作。我也试过useEffect。我注意到状态保持与初始值相同。因为每个游戏都有不同的任务,它们有不同的提示,所以我想使用条件语句来传递这些提示。
目前,路径是/timesup/:gameName/:taskNumber
const FailScreen = () => {
const { gameName, taskNumber } = useParams();
const [prompt, setPrompt] = useState("");
if (gameName === "zoomchat") {
if (taskNumber === 1) {
setPrompt("[mute callers]");
} else {
setPrompt("answers");
}
}
return (
<div>
<PromptBox
title="Time's Up!"
msg={`Oh no! You didn’t find all the ${prompt}`}
/>
<Link to="/">
<Button/>
</Link>
</div>
);
};
理想情况下,我不想对提示进行硬编码。它存在于每个游戏的另一个兄弟组件中。我不确定如何将这些信息提取到这里。我尝试了 useContext 但它也不起作用。
解决方案
你的组件FailScreen
在我看来完全没问题。您只需要将此组件放在Router
带有/timesup/:gameName/:taskNumber
路径的组件中即可。
所以,它应该是这样的:
<Route path="/:id/about">
<FailScreen />
</Route>
推荐阅读
- python - 如何让这段代码在 windows10 机器上运行?
- sql - 从多个子查询返回一行作为结果
- javascript - 以编程方式调用输入的更改事件
- r - 如果行号等于给定值,则从列返回值
- php - 在 PHP 上显示特定表列中的 MySQL 行内容(不同表上的相同 .row 名称)
- android-studio - 设计选项卡在 Android Studio 中不可见
- regex - 如何替换 bash 正则表达式中的扩展名?
- c - 减去两个指针(数组),(C语言)
- bash - 计算距离一个人生日还有多少天和多少小时的 UNIX 脚本
- ruby-on-rails - 如何将jsonb字段值视为序列化中的一等属性?