ReactJS 在数组 [hooks] 状态之间切换
ReactJS Toggling between states of array [hooks]
大家好,
你能帮我解决我遇到的问题吗?
所以,我有一个复选框和一个从 API 请求中获取的对象数组:
const ownRequest= [
{status: "pending", type: "aaa"},
{status: "pending", type: "bbb"},
{status: "pending", type: "bbb"},
{status: "pending", type: "aaa"},
{status: "pending", type: "aaa"}
]
export const Types= () => {
const [checked, setChecked] = useState(true);
const [ownRequest, setOwnRequest] = useState([]);
useEffect(() => {
let ignore = false;
async function fetchData() {
const result = await fetchTimeoffRequests();
if (!ignore) {
setOwnRequest(result);
}
}
fetchData();
return () => {
ignore = true;
};
}, []);
const req = checked ? ownRequest: ownRequest.filter(i=>i.type==="aaa")
setOwnRequest(req);
const handleCheck = (event) => {
setChecked(!checked);
}
}
return (
<div className={classes.root}>
<Checkbox onChange={(e) => handleCheck(e)} checked={checked} />
</div>
}
我想显示这样的项目:
如果选中则显示所有项目,如果不仅是类型为:"aaa" 的项目,还可以返回原始状态(如切换)
我做了一些事情,但我不知道如何进一步处理它
我认为你可能把它复杂化了:
const [checked, setChecked] = React.useState(false);
const req = [
{status: "pending", type: "aaa"},
{status: "pending", type: "bbb"},
{status: "pending", type: "bbb"},
{status: "pending", type: "aaa"},
{status: "pending", type: "aaa"}
]
//Simple filter depending on the checked state with a ternary if
const ownRequest= checked ? req : req.filter(i=>i.type==="aaa")
const handleCheck = (event) => {
setChecked(!checked);
}
<Checkbox onChange={(e) => handleCheck(e)} checked={checked} />
截至更新问题:
无限循环来自setOwnRequest(req);
。这是因为 setOwnRequest()
每次更改都会导致重新渲染。
大家好, 你能帮我解决我遇到的问题吗?
所以,我有一个复选框和一个从 API 请求中获取的对象数组:
const ownRequest= [
{status: "pending", type: "aaa"},
{status: "pending", type: "bbb"},
{status: "pending", type: "bbb"},
{status: "pending", type: "aaa"},
{status: "pending", type: "aaa"}
]
export const Types= () => {
const [checked, setChecked] = useState(true);
const [ownRequest, setOwnRequest] = useState([]);
useEffect(() => {
let ignore = false;
async function fetchData() {
const result = await fetchTimeoffRequests();
if (!ignore) {
setOwnRequest(result);
}
}
fetchData();
return () => {
ignore = true;
};
}, []);
const req = checked ? ownRequest: ownRequest.filter(i=>i.type==="aaa")
setOwnRequest(req);
const handleCheck = (event) => {
setChecked(!checked);
}
}
return (
<div className={classes.root}>
<Checkbox onChange={(e) => handleCheck(e)} checked={checked} />
</div>
}
我想显示这样的项目: 如果选中则显示所有项目,如果不仅是类型为:"aaa" 的项目,还可以返回原始状态(如切换)
我做了一些事情,但我不知道如何进一步处理它
我认为你可能把它复杂化了:
const [checked, setChecked] = React.useState(false);
const req = [
{status: "pending", type: "aaa"},
{status: "pending", type: "bbb"},
{status: "pending", type: "bbb"},
{status: "pending", type: "aaa"},
{status: "pending", type: "aaa"}
]
//Simple filter depending on the checked state with a ternary if
const ownRequest= checked ? req : req.filter(i=>i.type==="aaa")
const handleCheck = (event) => {
setChecked(!checked);
}
<Checkbox onChange={(e) => handleCheck(e)} checked={checked} />
截至更新问题:
无限循环来自setOwnRequest(req);
。这是因为 setOwnRequest()
每次更改都会导致重新渲染。