在第一次渲染时对 localStorage 空数组和 null 做出反应

问题描述

我尝试使用 localStorage,但遇到了一些令我感到困惑的事情。

  1. 当我尝试在 localStorage 添加一个任务时,它不会保存任务对象,而是一个空数组,只有在添加第二个任务后,它才开始保存对象任务?

  2. 由于我的第一点不知何故无法正常工作,第二个问题是现在当我手动清理 localStorage 并刷新页面时,我遇到了一个错误

如果有人能给我一些关于它的见解,这里是下面的代码。谢谢

const SearchInput = () => {
  const [taskValue,setTaskValue] = useState("");
  const [allTasks,setAllTasks] = useState([]);

  useEffect(() => {
    const persistedTasks = JSON.parse(localStorage.getItem("tasks"));
    setAllTasks(persistedTasks);
    console.log(persistedTasks);
  },[]);

  const handleChange = (e) => {
    setTaskValue(e.target.value);
  };

  const handleSubmit = (e) => {
    e.preventDefault();
    if (taskValue !== "") {
      setAllTasks([
        ...allTasks,{ id: allTasks.length + 1,text: taskValue.trim() },]);
    }
    localStorage.setItem("tasks",JSON.stringify(allTasks));
    setTaskValue("");
  };

  return (
    <>
      <Form onSubmit={handleSubmit}>
        <input
          type="text"
          placeholder="Add a task..."
          value={taskValue}
          onChange={handleChange}
        />
        <button>Submit the Task</button>
      </Form>
      <TasksContainer>
        {!allTasks.length && <p>No tasks</p>}
        {!!allTasks.length && (
          <ul>
            {allTasks.map((task) => (
              <TaskWrapper key={task.id}>
                <li>{task.text} </li>
                <div>
                  <button>Edit</button>
                  <button>Delete</button>
                </div>
              </TaskWrapper>
            ))}
          </ul>
        )}
      </TasksContainer>
    </>
  );
};

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)