Skip to content

fix(recruit): FAQ accordion — keep every item visible when toggling open/close#16

Merged
MciG-ggg merged 2 commits into
mainfrom
chore/github-project-setup
Jul 12, 2026
Merged

fix(recruit): FAQ accordion — keep every item visible when toggling open/close#16
MciG-ggg merged 2 commits into
mainfrom
chore/github-project-setup

Conversation

@MciG-ggg

Copy link
Copy Markdown

Summary

  • fix(recruit): FAQ accordion 切换 open/close 时,被点 + 之前 open 的两条 Q&A 会一起消失(opacity: 0
  • docs(setup): 提示 gh auth refresh 需要 read:project scope 才能 --add-project

Root cause

<li className={\rf-item reveal${open ? ' rf-open' : ''}`}>里的rf-open 会随 state 切换。.in是 IntersectionObserver 通过classList.add('in')手动加的。React 一旦发现 className 字符串变化,整个class 属性会被覆盖写回——in` 一起被冲掉。所以:

状态 className 变化? in 保留?
open 的项 → closed "rf-item reveal rf-open""rf-item reveal"
closed 的项 → open "rf-item reveal""rf-item reveal rf-open"
一直 closed 的项 不变 保留

结果:用户滚到 FAQ 点按钮时,open + 刚点的两条消失,其他 3 条保持可见。

Fix

.in 从 DOM 操作改成 React state(seen: Set<number>),纳入 JSX className:

className={`rf-item reveal${isIn ? ' in' : ''}${open ? ' rf-open' : ''}`}

seen 由 IntersectionObserver 维护,setState 触发重新渲染,className 字符串始终带 in,React 不会再冲掉它。

Test

新增 e2e/desktop.spec.js 回归测试 "FAQ accordion: opening/closing keeps every item visible"

  1. 滚到 FAQ,等 5 项都 in + opacity > 0.95
  2. 连续点 5 个按钮
  3. 每次点完断言所有 5 项仍然可见

pnpm test:e2e 全过:9 desktop + 12 mobile ✓

Changes

e2e/desktop.spec.js        | 34 ++++++++++++++++++++++++++++++++++
scripts/setup-github-project.sh |  3 ++-
src/components/Recruit.tsx | 29 ++++++++++++++++++++++-------

Commits

  • 444955d docs(setup): note read:project scope requirement
  • 4b97a0e fix(recruit): preserve .in class when FAQ accordion toggles open

MciG-ggg added 2 commits July 12, 2026 14:22
gh project field-edit 不能动 Priority 选项, 但 gh issue edit --add-project
(把 issue 加到 Project v2 看板) 需要 read:project scope 才能看到已有的
project number. 不授权的话会报 'not found'.

把原 'gh auth refresh -s project' 改成 'project,read:project' 并加一行
注释提醒用户留意浏览器跳出的授权页.
className 是 `rf-item reveal${open ? ' rf-open' : ''}`, open 一切,
React 重新写 class attribute, 把 IntersectionObserver 通过
classList.add 加的 .in 一起冲掉. 结果是: 用户滚到 FAQ 区域点按钮,
被点的那条 + 之前 open 的那条 opacity 变成 0 (消失), 其他没动
className 的 3 条保持可见.

修法: 把 .in 从 DOM 操作改成 React state (seen: Set<number>),
纳入 JSX className. 现在 open 切换时 className 字符串始终包含
'in', React 不会再冲掉它.

e2e: 加了 'FAQ accordion: opening/closing keeps every item visible'
回归测试, 滚到 FAQ 等 5 项都 in + opacity > 0.95, 然后连续点 5 次,
每次点完断言所有 5 项仍然可见. 防止以后再有 className 覆盖冲 class
的坑悄悄回来.
@vercel

vercel Bot commented Jul 12, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
innoseed-landing Ready Ready Preview, Comment Jul 12, 2026 6:23am

@MciG-ggg
MciG-ggg merged commit c63e8f9 into main Jul 12, 2026
3 checks passed
@MciG-ggg
MciG-ggg deleted the chore/github-project-setup branch July 12, 2026 06:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant