技术栈
成为全栈
FungLeo
1 小时前
flutter
·
markdown
·
dart
·
代码高亮
·
成为全栈
·
移动阅读
成为全栈·Flutter App 篇·Flutter Markdown 阅读器:支持范围与渲染边界
做阅读器之前我先问了一个问题:App 里渲染的 Markdown,和 Web 上渲染的,是同一样东西吗?
FungLeo
2 小时前
flutter
·
锚点
·
阅读体验
·
成为全栈
·
markdown目录
·
api契约
成为全栈·Flutter App 篇·服务端目录与文章辅助阅读:锚点、上下篇、浏览量和阅读历史
上一篇解决了"目录项怎么绑到标题上"。这篇接着说文章页里其余那些看起来都很小、但每个都有自己的坑的功能:目录面板、上下篇、浏览量、阅读历史。
FungLeo
21 小时前
flutter
·
移动开发
·
标签
·
搜索
·
分类管理
·
成为全栈
成为全栈·Flutter App 篇·分类、标签与搜索:移动端内容发现
上一篇把首页接上了真实接口。接下来是内容发现的三个入口:分类、标签、搜索。这三个功能看起来是三个页面,实际做完才发现它们共享一个核心难题,而且这个难题的解法写在契约里——如果我们没仔细读契约,会写出三份互相不兼容的代码。
FungLeo
1 天前
flutter
·
移动开发
·
下拉刷新
·
分页加载
·
列表优化
·
成为全栈
成为全栈·Flutter App 篇·列表分页与下拉刷新:去重、失败保留和返回位置
做列表页的时候我写过一句很自豪的代码:上线第三天,用户反馈:“首页文章会重复。”我一开始不信。服务端分页是干净的,第 1 页 12 条、第 2 页 12 条,去重逻辑能有什么问题?直到我打开日志,看到同一个 id 在列表里出现了两次。
FungLeo
2 天前
flutter
·
jwt
·
移动安全
·
身份认证
·
token刷新
·
成为全栈
成为全栈·Flutter App 篇·Refresh Token 旋转与并发 401:安全存储与会话代次
上一篇文章末尾留了个伏笔:缓存键里那个 session:${api.userId}:${api.epoch},我一直没解释 epoch 是什么。今天补上——顺便讲一个我在接入真实后端时被"教育"的问题。
FungLeo
3 天前
flutter
·
限流
·
dart
·
dio
·
错误处理
·
成为全栈
成为全栈·Flutter App 篇·移动端错误与限流:429、重试和写请求边界
上一篇做完令牌轮换,我以为"网络层最难的部分"已经过去了。结果联调第二天就撞上另一个。场景:用户狂点点赞按钮。服务端按 IP 限流,30 秒内第 5 次请求返回 429。我的第一版处理是:看到 429 就重试。
FungLeo
4 天前
flutter
·
移动开发
·
成为全栈
·
go_router
·
路由设计
·
深链接
成为全栈·Flutter App 篇·go_router 与四 Tab App Shell:保留导航状态、深链和登录回跳
做导航的时候,我被一个场景卡住了。用户点了"我的"Tab,然后进会员中心,看到"你还没有登录",跳到登录页。登录成功,回到会员中心。
FungLeo
8 天前
react.js
·
响应式设计
·
next.js
·
移动端适配
·
成为全栈
·
web 可访问性
成为全栈·Next.js 网站前台篇·响应式、可访问性与错误状态:内容站不能只验桌面首页
设计稿在 1440px 正常,只能证明一张静态画面。真实内容站还要面对 320px、四级菜单、键盘焦点、宽表格、重复标题、空数据、404 和服务端故障。
FungLeo
9 天前
react
·
isr
·
next.js
·
metadata
·
成为全栈
·
站点配置
成为全栈·Next.js 网站前台篇·站点设置如何驱动页头、页脚与 SEO
站点名称、Logo、描述、关键词和版权不是散落在组件里的常量。它们是一份公开配置,需要同时驱动页面外壳和 metadata,并在接口失败或字段为空时有一致降级。
FungLeo
11 天前
react
·
csrf
·
next.js
·
bff
·
成为全栈
·
route handler
成为全栈·Next.js 网站前台篇·同源 BFF 代理:API、附件、Cookie 与跨站写入保护
Route Handler 代理不是把一个 URL 原样转发到另一个 URL。它还要限制目标地址、保留查询串、正确处理多个 Set-Cookie、隔离私有缓存,并拒绝明确的跨站写入。
FungLeo
11 天前
react.js
·
内容审核
·
next.js
·
评论系统
·
树形数据
·
成为全栈
成为全栈·Next.js 网站前台篇·评论系统:叠楼、回复、删除与内容审核如何落到前台
后端返回的是带 parentId 的扁平分页,用户看到的却是主楼、回复对象和上下文。前端重建树时,必须同时面对跨页父评论、审核隐藏、删除缺口与异常环形引用。
FungLeo
16 天前
前端
·
react.js
·
前端框架
·
项目复盘
·
成为全栈
成为全栈·React 管理后台篇·总复盘:从“接口能调通”到“后台值得使用”
这套管理后台最大的工作量不在把二十多个接口接上页面,而在处理状态所有权、失败恢复、契约偏差和用户工作被打断的边界。
FungLeo
17 天前
react
·
isr
·
next.js
·
成为全栈
·
react cache
·
opennext
成为全栈·Next.js 网站前台篇·数据获取与缓存:60 秒再验证背后到底发生了什么
revalidate: 60 不是每 60 秒跑一次定时任务,也不保证第 61 秒的用户立即看到新内容。只有理解过期、旧值和再生成的时序,才能知道自己向用户承诺了什么。
FungLeo
23 天前
react
·
rbac
·
路由守卫
·
权限控制
·
前端权限
·
成为全栈
成为全栈·React 管理后台篇·按钮级权限:能力映射、菜单过滤与自锁保护
前端权限的价值是让用户只看到能够完成的操作,并在高风险场景阻止明显误操作。真正的安全边界仍在后端。权限功能很容易从一行判断开始:user.role === 'admin'。用户管理菜单里写一次,路由里写一次,重置密码按钮再写一次。后来产品允许 editor 查看某个页面,三处条件只改了两处,于是菜单能点、路由却跳 403;或者直接输入地址能进,页面按钮又全部消失。
FungLeo
23 天前
react
·
内容安全
·
状态机
·
交互设计
·
成为全栈
·
评论审核
成为全栈·React 管理后台篇·评论审核工作流:把状态下拉改成可理解的动作
审核人员需要判断内容并采取动作,而不是替系统翻译状态枚举。界面要同时提供原文、上下文、理由和明确结果。
FungLeo
24 天前
图片上传
·
react
·
响应式设计
·
markdown编辑器
·
异步编程
·
成为全栈
成为全栈·React 管理后台篇·Markdown 编辑器:预览、暗色主题与连续图片粘贴
把 Markdown 编辑器渲染出来并不难。真正决定它能否用于写作的,是受控值、异步上传、光标位置、连续操作和响应式布局之间能不能保持一致。
FungLeo
25 天前
react
·
表单设计
·
zod
·
react hook form
·
成为全栈
·
数据回填
成为全栈·React 管理后台篇·表单页范式:校验、数据回填与未保存保护
表单可靠性不只取决于校验规则。远端数据什么时候写入、什么算已保存、离开页面时是否仍有任务进行,决定了用户会不会丢掉已经完成的工作。
FungLeo
25 天前
react
·
前端架构
·
分页查询
·
react router
·
成为全栈
·
url状态
成为全栈·React 管理后台篇·列表页范式:让分页、筛选和返回位置进入 URL
页码、筛选和排序不是表格组件的临时状态,而是“用户正在查看哪一组数据”的完整描述。只要这个描述值得刷新、返回或分享,就应该进入 URL。
FungLeo
1 个月前
react
·
状态管理
·
zustand
·
react hook form
·
成为全栈
·
tanstack query
成为全栈·React 管理后台篇·服务端状态、会话状态、界面状态:不要都塞进 Zustand
状态管理真正困难的地方,不是选 Redux、Zustand 还是 Context,而是判断一份数据究竟由谁拥有、什么时候失效,以及谁有权修改它。
FungLeo
1 个月前
react
·
路由守卫
·
zustand
·
刷新令牌
·
成为全栈
·
前端鉴权
成为全栈·React 管理后台篇·前端鉴权闭环:内存令牌、刷新旋转与路由守卫
登录页拿到 token 只是鉴权的起点。刷新页面、多个请求同时过期、账号被禁用和主动登出之后,界面仍能给出一致结果,才算形成闭环。