如何在打字稿中使用 prevstate 到本地存储(反应)
how to use prevstate to localstorage in typescript(react)
type allergyProps = {
filterAllergy: allergyArray[];
setRemoveAllergy: Dispatch<SetStateAction<string>>;
setSearchAllergy: Dispatch<SetStateAction<string>>;
};
type allergyArray = {
id: number;
name: string;
};
const Allergy = ({ setSearchAllergy, filterAllergy }: allergyProps) => {
const [isInput, setIsInput] = useState(false);
const [removeAllergy, setRemoveAllergy] = useState<string[]>([]);
const handleInput = (e: React.ChangeEvent<HTMLInputElement>) => {
if (e.target.value) {
setIsInput(true);
} else {
setIsInput(false);
}
setSearchAllergy(e.target.value);
};
const click = (e: React.MouseEvent<HTMLButtonElement>) => {
let value = e.currentTarget.name;
setRemoveAllergy([...removeAllergy, value]);
localStorage.setItem("allergy", removeAllergy); << #####error point !#######
};
错误名称是
'string[]' 类型的参数不可分配给 'string'.
类型的参数
29 | let value = e.currentTarget.name;
30 | setRemoveAllergy([...removeAllergy, value]);
> 31 | localStorage.setItem("allergy", removeAllergy);
| ^^^^^^^^^^^^^
32 | };
我想为 setItem 使用 prevState,
如何使用数组类型的prevState?
localStorage 不能保存除字符串以外的任何数据类型。如果你还想强制,可以把数组转成字符串,然后放到localStorage中,如下:
localStorage.setItem("allergy", JSON.stringify(removeAllergy));
当你想从 localStorage 中读取时,你需要这样做才能将其恢复为数组形式:
JSON.parse(localStorage.getItem("allergy"));
type allergyProps = {
filterAllergy: allergyArray[];
setRemoveAllergy: Dispatch<SetStateAction<string>>;
setSearchAllergy: Dispatch<SetStateAction<string>>;
};
type allergyArray = {
id: number;
name: string;
};
const Allergy = ({ setSearchAllergy, filterAllergy }: allergyProps) => {
const [isInput, setIsInput] = useState(false);
const [removeAllergy, setRemoveAllergy] = useState<string[]>([]);
const handleInput = (e: React.ChangeEvent<HTMLInputElement>) => {
if (e.target.value) {
setIsInput(true);
} else {
setIsInput(false);
}
setSearchAllergy(e.target.value);
};
const click = (e: React.MouseEvent<HTMLButtonElement>) => {
let value = e.currentTarget.name;
setRemoveAllergy([...removeAllergy, value]);
localStorage.setItem("allergy", removeAllergy); << #####error point !#######
};
错误名称是 'string[]' 类型的参数不可分配给 'string'.
类型的参数 29 | let value = e.currentTarget.name;
30 | setRemoveAllergy([...removeAllergy, value]);
> 31 | localStorage.setItem("allergy", removeAllergy);
| ^^^^^^^^^^^^^
32 | };
我想为 setItem 使用 prevState, 如何使用数组类型的prevState?
localStorage 不能保存除字符串以外的任何数据类型。如果你还想强制,可以把数组转成字符串,然后放到localStorage中,如下:
localStorage.setItem("allergy", JSON.stringify(removeAllergy));
当你想从 localStorage 中读取时,你需要这样做才能将其恢复为数组形式:
JSON.parse(localStorage.getItem("allergy"));