Files
aurora-admin/site/end-content/countdown.react.json
T

56 lines
3.1 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"slug": "countdown",
"end": "react",
"curated": true,
"summary": "倒计时:只给一个 target 时间戳,组件每秒自刷新并按天/时/分/秒分段渲染。",
"usage": [
"React 端 props 极少:仅 target(默认「当前时间 + 1 小时」)(Countdown.jsx:6)。",
"自刷新靠 useState + setInterval 每秒 setNow,卸载时 clearInterval(Countdown.jsx:7-11)。",
"差值用 Math.max(0, target - now) 收敛,过时后停在 00(Countdown.jsx:12)。",
"分段是条件渲染:天数大于 0 才补前面的「天」段,因此短倒计时不会出现 00 天(Countdown.jsx:20-25)。",
"数值补零由 pad 统一处理,两位定宽(Countdown.jsx:4)。"
],
"bestPractices": [
"target 是绝对时间戳而非剩余秒数,请在传入前算好,避免组件里再叠加 Date.now()。",
"倒计时归零后不会触发任何回调,也不停止定时器(仍每秒 setNow),需要到点提醒请自行在父级监听时间或在 target 前做判断。",
"同一页面多个倒计时各自持有定时器,数量多时建议拆成一个共享时间源。"
],
"apiCarrier": {
"kind": "props",
"note": "React 端的 API 载体是 props 与回调:属性驱动外观(type/size/disabled 等布尔与枚举),交互经 onXxx 回传(如 onChange/onClick/onSelectionChange);没有 v-model,受控组件固定写成 value + onChange,非受控则用 defaultValue。",
"table": [
{
"name": "target",
"type": "number",
"desc": "目标时间戳(毫秒),默认当前时间加一小时"
}
]
},
"a11y": [
"整块是 div + span 的数字串(Countdown.jsx:19-40),读屏会把「01 时 02 分」逐段念出,语义连贯性一般。",
"数字每秒变化但未使用 aria-live,读屏不会主动播报变化——这对倒计时恰好是合适的(避免刷屏),但也没有「剩余时间」的整体描述。",
"天数段条件隐藏会让文本结构随时间变化,需要稳定结构时应在外层包一层带 aria-label 的容器。"
],
"resources": [
{
"file": "frameworks/Countdown.jsx",
"kind": "React(React)",
"desc": "React 端组件实现源码,props 与回调的唯一定义处"
},
{
"file": "frameworks/Countdown.css",
"kind": "样式",
"desc": "该 React 实现依赖的样式文件"
}
],
"exampleIds": [
"countdown-ex-1"
],
"notes": [
"frameworks/Countdown.jsx:6 中可指到 target(number)——目标时间戳(毫秒),默认当前时间加一小时",
"props 解构清单见 frameworks/Countdown.jsx:6-6;本文件 table 只列该端真正消费的属性与回调。",
"过滤口径:事实包 consumedApi 里还包含绑在组件内部节点上的同名处理器(如 onClick/onChange 绑在内部 button、input、checkbox 上,见 frameworks/Countdown.jsx 全文),它们不是对外 props,因此未进 table。",
"table 构成核验:1 行中 1 行是 frameworks/Countdown.jsx 解构出的顶层 props(解构块 frameworks/Countdown.jsx:6-6);本组件 table 全部为顶层 props。"
]
}