#reactjs #typescript #checkbox
#reactjs #typescript #флажок
Вопрос:
У меня проблемы с сохранением состояния флажка после перезагрузки страницы. На данный момент я сохранил свои непроверенные флажки в localStorage, но понятия не имею, каким должен быть мой следующий шаг. Проще говоря, когда я снимаю флажок, я хочу, чтобы он оставался непроверенным, когда я возвращаюсь на эту страницу. Вот фрагмент кода.
export default () => {
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);
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>
)
Большое вам спасибо!
Ответ №1:
прежде всего, я бы рекомендовал сохранить это в хранилище сеансов, если вам не нужно, чтобы оно оставалось проверенным после открытия в новой вкладке или окне.
для этого вам просто нужно прочитать значение из хранилища сеанса при сборке компонента. попробуйте что-то вроде этого…
() => {
const [isChecked, setChecked] = useState(sessionStorage.getItem('isChecked') || false);
const onCheckboxChange = (key: string, value: boolean) => {
sessionStorage.setItem('isChecked', value)
setChecked(value)
};
return (
...
<Checkbox
value={isChecked}
label="Delivery Methods"
onChange={(value) => onCheckboxChange("delieveryMethods", value)}
/>
)
}