javascript - 切换选项无法正确使用 useState
问题描述
我有以下组件:
import React, {
Fragment,
useState
} from "react";
import PropTypes from "prop-types";
import {
connect
} from "react-redux";
import {
Link,
withRouter
} from "react-router-dom";
const ChooseRole = () => {
// const [role, setRole] = useState({
// business: false,
// jobSeeker: false
// });
const [business, toggleBusiness] = useState(false);
const [jobSeeker, toggleJobSeeker] = useState(false);
const onClick = (e, roleType) => {
switch (roleType) {
case "business":
toggleBusiness(!business);
if (business === true) {
toggleJobSeeker({
jobSeeker: false
});
}
break;
case "jobSeeker":
toggleJobSeeker(!jobSeeker);
if (jobSeeker === true) {
toggleBusiness({
business: false
});
}
break;
}
};
return (
<Fragment>
<h1>First thing's first</h1>
<h3 className="mt-4">I'm a...</h3>
<h3
name="business"
className={business === true ? "text-primary" : ""}
style={{ cursor: "pointer" }}
onClick={e => onClick(e, "business")}
>
Business
</h3>
<h3
name="jobSeeker"
className={jobSeeker === true ? "text-primary" : ""}
style={{ cursor: "pointer" }}
onClick={e => onClick(e, "jobSeeker")}
>
Talent
</h3>
</Fragment>
);
当我单击h3
呈现的任一元素时,未正确添加 className。点击,比如说,商业——那个h3的文本应该变成橙色。再次单击它应将其变回黑色。如果文字业务为橙色,点击人才应将人才文字变为橙色,将业务文字变为黑色。但由于某种原因,点击业务,然后点击人才,它们都变成了橙色。再次单击其中一个会使它们都变回黑色。我不确定我在这里做错了什么,我在某处有逻辑错误吗?
解决方案
您的问题是您在状态中设置对象而不是布尔值。您还需要引用正确的变量。而不是检查业务是否真实并将求职者变为虚假..只需在业务切换时检查求职者是否为真
switch (roleType) {
case "business":
toggleBusiness(!business);
if (jobSeeker === true) {
toggleJobSeeker(false);
}
break;
case "jobSeeker":
toggleJobSeeker(!jobSeeker);
if (business === true) {
toggleBusiness(false);
}
break;
}
推荐阅读
- angular - 如何从 BrowserPlatformLocation 扩展功能
- angular - 在 Angular 应用程序中使用 typescript 读取内部 JSON
- html - 来自不同文件夹的图像的 HTML 代码。升华
- javascript - 使用 ajax jQuery 更新 woocommerce 结帐页面产品数量下拉列表?
- google-sheets - 在 Google 表格中计算一个日期小于另一个日期的时间
- python-3.x - 给定任何维度的二维列表中元素的行和列,如何递归获取对角线?
- cplex - MIP 求解器相互矛盾
- java - 如何规范化列表的每个元素?
- swift - 在 WidgetKit 中每分钟更新时间文本标签
- php - PHRETS v2 仅在属性存在图像时下载,检查属性是否有图像