javascript - 通过复选框选中/取消选中隐藏和显示表格列
问题描述
我是编程新手,现在只是一个大三学生。我有复选框列表。当我取消选中一个复选框时,我希望该特定列从前端消失。简单地说,我有一张表,里面有一些数据。假设它有 3 列,当我取消选中其中的 2 列时,这 2 列应该消失。这是我的一段代码,现在,它将未选中的复选框保存到 LocalStorage。感谢您的任何建议和提示!如果你能展示出好的方向,真的很感激:D
export default () => {
const [isOpen, setIsOpen] = useState(false);
const [onOkClick, setOnOkClick] = useState(false);
const [isDialogOpen, setDialogOpen] = useState(false);
const [isDataTable, setDataTable] = useState(true);
const [isDefaultChecked, setDefaultChecked] = useState(true);
const [isChecked, setChecked] = useState();
const [isColumn, setColumn] = useState(true);
const [hiddenColumns, setHiddenColumns] = useState([]);
const [Checked, setIsChecked] = useState([]);
const onCheckboxChange = (key: string, value: boolean) => {
console.log(key, value);
// const array = JSON.parse(localStorage.getItem("hiddenColumns"));
if (!value)
setHiddenColumns((hiddenColumns) => [...hiddenColumns, { label: key }]);
else setHiddenColumns(hiddenColumns.filter((x) => x.label !== key));
};
return (
<Dialog
isOpen={isDialogOpen}
onOkClick={() => {
localStorage.setItem(
"hiddenColumns",
JSON.stringify(hiddenColumns)
);
console.log(hiddenColumns);
setDialogOpen(false);
}}
onCloseClick={() => setDialogOpen(false)}
>
<div>
<Checkbox
defaultChecked={isDefaultChecked}
label="Delivery methods"
onChange={(value) => onCheckboxChange("delieveryMethods", value)}
/>
</div>
<div>
<Checkbox
defaultChecked={isDefaultChecked}
label="Delivery Date"
onChange={(value) => onCheckboxChange("delieveryDate", value)}
/>
</div>
<div>
<Checkbox
defaultChecked={isDefaultChecked}
label="Organization Name"
onChange={(value) => onCheckboxChange("organization", value)}
/>
</div>
<div>
<APIDataTable<Mail>
apiPath="/edo/chancellery/maildoc_extinc"
params="?on_marking=true "
type={Mail}
columns={[
new Column<Mail>({
label: "Delivery Methods",
render: (row) => {
return "";
},
}),
new Column<Mail>({
label: "Delivery Date",
render: (row) => {
return row.incomingDateText;
},
}),
new Column<Mail>({
label: "Organizaion Name",
render: (row) => {
return row.organizationNameOrFullName;
},
}),
</div>
)
};
解决方案
将状态类型更改hiddenColumns
为对象并将布尔值设置为正确的键。例如{ delieveryMethods: true }
。此外,单独columns
用于过滤操作。检查下面的详细信息。
// ...
const [hiddenColumns, setHiddenColumns] = useState({});
// ...
const onCheckboxChange = (key: string, value: boolean) => {
console.log(key, value);
// const array = JSON.parse(localStorage.getItem("hiddenColumns"));
setHiddenColumns(prev => ({...prev, [key]: value}));
};
const columns = [];
if (!hiddenColumns['delieveryMethods']) {
columns.push(
new Column<Mail>({
label: 'Delivery Methods',
render: row => {
return '';
},
}),
);
}
if (!hiddenColumns['delieveryDate']) {
columns.push(
new Column<Mail>({
label: 'Delivery Date',
render: row => {
return row.incomingDateText;
},
}),
);
}
if (!hiddenColumns['organization']) {
columns.push(
new Column<Mail>({
label: 'Organizaion Name',
render: row => {
return row.organizationNameOrFullName;
},
}),
);
}
<APIDataTable<Mail>
apiPath="/edo/chancellery/maildoc_extinc"
params="?on_marking=true "
type={Mail}
columns={columns}
/>
推荐阅读
- javascript - DOM 是用什么语言编写的?
- ios - iOS 生产崩溃 - EXC_BAD_ACCESS / KERN_INVALID_ADDRESS / CFDictionaryGetValue + 80
- eclipse - TFS Eclipse Pending Changes 未显示已编辑的文件
- sql - *BigQuery 存储过程中的参数
- python - 如何存储数字
- azure - Azure DevOps Release Pipeline 淘汰了应用服务部署槽
- css - React-Router NavLink 活动颜色
- ngrok - ngrok:使用本地主机子域
- c - 在 C 中传递指向函数的指针时的困惑
- python - How does `points` work in `integrate.quad`?