NoSignups (FckSignups)
NoSignups 架构:加载、筛选、分组与渲染各自负责什么
沿客户端数据路径理解回退状态、全词匹配和编辑分组,解释读者为什么会看到当前结果。
你将学会
- 成功加载不等于记录通过运行时验证。
- 全词过滤后,星标成为实际的排序平局条件。
- 折叠规则和回退状态会影响可见结果。
开始前需要
- 基础 JavaScript 和 JSON 知识
- 一个无敏感任务样本与目录测试记录
解释本章边界,并用建议样例或审查记录进行核验。
先看结论
- 成功加载不等于记录通过运行时验证。
- 全词过滤后,星标成为实际的排序平局条件。
- 折叠规则和回退状态会影响可见结果。
搜索之前先决定数据来源
App 调用 useTools,并将派生数据传给页头、筛选器和 Tools。钩子持有完整记录、分类、加载状态、查询和选中分类。其 effect 在开发模式尝试开发 JSON,再尝试生产 JSON,最后使用 FALLBACK_DATA。因此,已检查路径在浏览器内加载和筛选目录,不调用服务端搜索索引。
hydrate 会在缺少 all 分类时补入该分类,并更新状态数组。loadTools 将解析结果断言为 ToolsData,却不在运行时检查每条记录。语法正确的 JSON 因而可能加载成功,却包含后续代码无法处理的字段。可靠分支应在解析和状态注入之间加入运行时验证,并明确合格回退数据的条件。
先选择结果,再决定编辑展示
查询先被拆成词;钩子按分类过滤,为剩余记录计算匹配分数,要求全部查询词命中,排序后再划分编辑分组。可搜索文本由名称、描述和标签构成。分类是精确的前置条件,星标数是排序输入,不是根据读者意图训练出来的相关性模型。
通过全词过滤后,每条保留记录的分数都等于查询词数量。因此,对普通非空查询,排序里的分数项无法进一步区分结果,记录中的星标数才会打破平局。随后分组还会改变页面展示顺序。按照这条处理链解释,比笼统称为复杂相关性排序更准确。
加载状态和展开规则影响可见内容
Tools 在数据就绪前显示加载状态,在合并分组没有结果时显示空状态。存在精选分组时,符合条件的普通记录可能先折叠在“显示更多”后;搜索时又会展示该组的匹配项。查询或分类变化会重置 showMore。这些是展示规则,并不表示记录从目录中消失了。
回退数据可以一边提供卡片,一边携带错误状态。但 Tools.tsx 的空结果返回分支位于错误横幅之前,因此空的回退结果可能只显示无匹配,而看不到那条回退提示。这是已检查代码分支的有限结论,不代表所有线上故障;它适合成为维护者的回归测试案例。
实施步骤
- 1
跟踪一条 JSON 记录进入 useTools 状态。
- 2
按顺序检查分类、评分、排序与 sectionize。
- 3
分别测试加载、回退、空结果和折叠状态。
可复制示例
JSON 请求 -> 解析 -> 注入状态
查询 -> 分词
记录 -> 分类筛选 -> 计分 -> 要求全部词命中
-> 排序 -> 分组 -> Tools -> ToolCard
回退数据仍可能携带错误状态。常见问题
查询会发送给外部搜索服务吗?
已检查的 useTools 路径在浏览器中筛选已加载记录,但获取目录本身仍会发起网络请求。
为什么某些工具需要点“显示更多”才出现?
存在精选分组时,默认界面可以折叠普通符合条件的记录;搜索和展开状态会改变这个展示方式。
资料来源
- README.md来源核查 2026-09-07
- package.json来源核查 2026-09-07
- vite.config.mts来源核查 2026-09-07
- src/hooks/useTools.ts来源核查 2026-09-07
- src/components/Home/Tools/Tools.tsx来源核查 2026-09-07
- src/components/Home/Tools/ToolCard/ToolCard.tsx来源核查 2026-09-07
- src/types/index.ts来源核查 2026-09-07
- src/constants/fallbackData.ts来源核查 2026-09-07
- src/data/schema.js来源核查 2026-09-07
- cloudflare-worker/worker.ts来源核查 2026-09-07
- cloudflare-worker/urlHandlers/handleSubmitTool.ts来源核查 2026-09-07
- cloudflare-worker/utils.ts来源核查 2026-09-07