用localstorage存json数据配合dom动态渲染可实现刷新不丢、操作顺手的本地记事本,关键在于存得稳、读得准、改得顺:数据结构用含id、content、createdat等字段的对象数组;存取需try-catch容错;dom渲染与数据操作解耦,变更后统一重绘;注重回车添加、空提示、删除确认、编辑态视觉反馈等体验细节。

直接用 localStorage 存 JSON 数据,配合 DOM 动态渲染,就能做出刷新不丢、操作顺手的本地记事本。关键不在“多炫”,而在“存得稳、读得准、改得顺”。
数据结构设计要清晰
每条笔记建议用对象形式组织,包含必要字段:
-
id:用
Date.now()或Math.random()生成唯一标识,避免重复和冲突 - content:正文内容(支持换行、空格等原始格式)
- createdAt:创建时间,用于排序或展示
- updatedAt(可选):编辑时间,方便区分新旧修改
整个笔记列表就存为一个数组,转成 JSON 字符串后塞进 localStorage.setItem('notes', JSON.stringify(notes))。
存取逻辑必须做容错处理
浏览器可能禁用 localStorage,或存储空间满,不能假设它一定可用:
- 写入前先
try...catch包裹,失败时提示用户“本地存储不可用,请检查浏览器设置” - 读取时用
localStorage.getItem('notes'),返回null就当首次使用,初始化空数组 - 解析 JSON 前加
if (str && typeof str === 'string')判断,防止JSON.parse(null)报错
DOM 渲染与状态同步要解耦
不要一边操作 DOM 一边改数据,容易错乱。推荐流程:
- 所有增删改都只操作 JS 数组(如
notes.push(newNote)、notes = notes.filter(...)) - 每次变更后统一调用一个
render(notes)函数,清空列表容器再逐个innerHTML或appendChild插入 - 双击编辑、拖拽排序等功能,都基于数组索引或 id 操作数据,再触发重绘
体验细节决定是否“像真实应用”
用户感知强的地方,花一点功夫就很值:
- 输入框回车直接添加,不用点按钮
- 空列表时显示友好提示,而不是留白
- 删除前加简单确认(
confirm('确定删除?')),避免误触 - 编辑状态给
contenteditable="true"元素加虚线边框或背景色,视觉可识别
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











