[英]localStorage.getItem() doesn't retrieve data on page refresh - ReactJs (TypeScript)
我正在嘗試使用 ReactJs 創建待辦事項列表應用程序,使用localStorage
setItem()
工作正常但getItem()
除了空數組外不返回任何內容!
|| ""
|| ""
因為JSON.parse()
返回string || null
string || null
在 TypeScript。useEffect(() => {
localStorage.setItem("todos", JSON.stringify(todos));
}, [todos]);
useEffect(() => {
const items = JSON.parse(localStorage.getItem("todos") || "");
if (items) {
setTodos(items);
}
}, []);
這是我向todos
提供數據的地方
const [todos, setTodos] = useState<todosObj[]>([]);
const [count, setCount] = useState(1);
const [status, setStatus] = useState<"All" | "completed" | "uncompleted">(
"All"
);
const [inputText, setInputText] = useState("");
const [date, setDate] = useState(new Date());
const inputHandler = (e: React.FormEvent<HTMLInputElement>) => {
setInputText(e.currentTarget.value);
};
const submitHandler = (e: React.FormEvent<HTMLButtonElement>) => {
e.preventDefault();
setCount(count + 1);
if (inputText !== "") {
setTodos([
...todos,
{
id: count,
text: inputText,
completed: false,
date: date,
},
]);
}
setInputText("");
};
抱歉,我沒有足夠的聲譽來發表評論,所以必須將其作為答案發布:
todos
的初始數據是否已設置? 如果您可以提供向todos
提供數據的位置,那就更好了
useEffect(() => {
const stringifyTodos = JSON.stringify(todos)
localStorage.setItem("todos", stringifyTodos);
}, [todos]);
useEffect(() => {
const storedTodos = localStorage.getItem("todos")
const items = JSON.parse(storedTodos);
if (items) {
setTodos(items);
}
}, []);
嘗試這種方式,我認為它會起作用。
我通過getItem()
初始化todos
state 解決了這個問題
像這樣:
const [todos, setTodos] = useState<todosObj[]>(
JSON.parse(localStorage.getItem("todos") || "") || []
);
如果有人知道它不起作用的原因,請告訴我。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.