【发布时间】:2020-10-27 16:50:19
【问题描述】:
免责声明:我知道这个主题非常不具体。但我不知道如何更好地描述我的问题。请随时在 cmets 中帮助我,我稍后会更新它。
我从 MySQL 数据库中获取一组对象到我的 React 应用程序组件。它有这样的结构:
const fetchedData = [
{
"id": 46923,
"type": "Change Request",
"business": "Systems",
"owner": "Max",
"created_on": "2019-08-16T05:39:00.000Z",
"many more": "values",
},
{
"id": 46924,
"type": "Change Notice",
"business": "Tools",
"owner": "Max",
"created_on": "2019-09-06T11:19:00.000Z",
"many more": "values",
},
]
类型只能有三个值:
- 更改请求
- 变更通知
- 更改任务
业务只能具有三个值:
- 系统
- 工具
- 杂项
我有一个反应组件,每个值都有复选框:
function ControlBoard({ applyFilter }) {
const classes = useStyles();
const [state, setState] = useState({
business: {
systems: false,
tools: false,
misc: false,
},
type: {
changerequest: false,
changenotice: false,
changetask: false,
},
});
const handleChange = (event) => {
const split = event.target.name.split("|");
const group = split[0];
const name = split[1];
let prop = state;
prop[group][name] = event.target.checked;
setState({ ...prop });
};
const setFilter = () => {
applyFilter(state);
};
useEffect(() => {
setFilter();
}, [state]);
return (
<div className={classes.root}>
<div className={classes.title}>Businesses</div>
<div className={classes.items}>
<div className={classes.item}>
<FormControlLabel
control={
<Checkbox
checked={state.business.systems}
onChange={handleChange}
name="business|systems"
color="primary"
/>
}
label="Systems"
/>
</div>
<div className={classes.item}>
<FormControlLabel
control={
<Checkbox
checked={state.business.tools}
onChange={handleChange}
name="business|tools"
color="primary"
/>
}
label="Tools"
/>
</div>
<div className={classes.item}>
<FormControlLabel
control={
<Checkbox
checked={state.business.misc}
onChange={handleChange}
name="business|misc"
color="primary"
/>
}
label="Misc"
/>
</div>
</div>
<div className={classes.title}>Type</div>
<div className={classes.items}>
<div className={classes.item}>
<FormControlLabel
control={
<Checkbox
checked={state.type.changerequest}
onChange={handleChange}
name="type|changerequest"
color="primary"
/>
}
label="Change Request"
/>
</div>
<div className={classes.item}>
<FormControlLabel
control={
<Checkbox
checked={state.type.changenotice}
onChange={handleChange}
name="type|changenotice"
color="primary"
/>
}
label="Change Notice"
/>
</div>
<div className={classes.item}>
<FormControlLabel
control={
<Checkbox
checked={state.type.changetask}
onChange={handleChange}
name="type|changetask"
color="primary"
/>
}
label="Change Task"
/>
</div>
</div>
</div>
);
}
export default ControlBoard;
因此我有我的状态对象:
{
business: {
systems: false,
tools: false,
misc: false,
},
type: {
changerequest: false,
changenotice: false,
changetask: false,
},
}
如何根据state 过滤我的fetchedData 数组?布尔值(包括业务和类型的多个真值)的每种组合都是可能的。以后会有比业务和类型更多的价值。
要检查获取的数据值,可以使用例如:
state.type[0].toUpperCase() === fetchedDataRow.type.toUpperCase().replace(" ", "")
【问题讨论】:
标签: javascript arrays reactjs sorting