You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

待办列表任务创建后消失,刷新才显示的问题求助

问题:To-Do List创建任务后无法即时显示,需刷新页面

开发To-Do List项目时遇到以下问题:在某项目下创建任务后,任务不会立即显示在当前页面——尽管任务ID匹配、localStorage里的任务数组已经填充,但切换到AllTask、Important、Checked或Today页面能正常看到新任务,必须刷新当前页面才能显示新创建的任务。

相关代码片段:

import RenderTasks from './renderTasks';

const tasksWindow = document.querySelector('.tasks');
const taskForm = document.querySelector('.taskWindow');
let taskArray = [];

export default function renderPage(name, id){

    taskArray = JSON.parse(localStorage.getItem("taskList"));

    console.log(taskArray);

    while(tasksWindow.firstChild){
        tasksWindow.removeChild(tasksWindow.firstChild);
    }
    const title = document.createElement('h1');
    title.classList.add('tasksTitle');
    title.textContent = name;
    tasksWindow.appendChild(title);
    const gridContainer = document.createElement('div');
    gridContainer.classList.add('taskGrid');
    tasksWindow.appendChild(gridContainer);
    const addTask = document.createElement('button');
    addTask.classList.add('addTask');
    addTask.textContent = '+';
    tasksWindow.appendChild(addTask);
    addTask.addEventListener('click', (e) => {
        taskForm.style.display = 'flex';
        add.style.display = 'flex';
        editAdd.style.display = 'none';
    });
    taskArray.forEach(element => {
        if(element.parent == id){
            RenderTasks(element.title, element.description, element.priority, element.dueDate, element.checked);
        }
    });
}

问题原因

你的renderPage函数依赖读取localStorage的数据来渲染页面,但创建任务的逻辑里,没有在任务保存到localStorage后触发当前页面的重新渲染:

  • 切换到其他页面能显示新任务,是因为切换时会调用对应页面的渲染函数,重新读取了localStorage的最新数据;
  • 当前页面在创建任务后没有重新执行renderPage,所以页面内容还是旧的,必须刷新才能重新读取数据渲染。
  • 和赋值运算符=无关,核心是渲染时机缺失。

解决方案

  1. 在任务保存后触发当前页面重新渲染
    找到处理任务提交的代码(比如表单提交事件),在将新任务存入localStorage之后,调用renderPage并传入当前页面的名称和项目ID:
// 示例:任务提交处理函数
function handleTaskSubmit(newTask) {
    // 获取现有任务数组
    let taskList = JSON.parse(localStorage.getItem("taskList")) || [];
    // 添加新任务
    taskList.push(newTask);
    // 保存回localStorage
    localStorage.setItem("taskList", JSON.stringify(taskList));
    // 关键:重新渲染当前页面,替换成你实际的当前页面名称和项目ID
    renderPage(currentActivePageName, currentProjectId);
}
  1. 检查RenderTasks的渲染目标
    确认RenderTasks函数是将任务元素添加到当前页面的.taskGrid容器中,而不是其他页面的DOM元素,避免渲染目标错误导致任务不显示。

内容的提问来源于stack exchange,提问作者Orion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 15:34:50