成为全栈

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