想象你请了一位智能装修设计师,要为两套房子出施工图。第一套是“乐高自由拼装之家”——没有固定户型,墙壁、家具、灯光全靠积木自由组合,每个房间独立成型,用什么材料、怎么拼接完全由你说了算。这是React的世界:组件就是积木,想要什么界面就拼什么界面。第二套是“精装样板间之家”——房型结构、水电管线、插座位置早已按标准埋好,你要做的是按约定把家具摆进指定位置。这是Vue的世界:模板就是骨架,照着指令摆放内容即可。 同样的AI设计师,给这两套房子画图的方法天差地别。给乐高之家,他画的是“积木拼装说明书”——每块积木标好接口、卡扣、拼装顺序;给样板间之家,他画的是“家具摆放图”——每个位置标好尺寸、朝向、风格。图纸上的插座标注规范(Props设计约定)、水电改造工坊(组合式API)、返工记录(问题排查),构成了AI生成React与Vue组件代码的全景图。读完这篇文章,你会拿到这套图纸的完整读法。

岗位关联

学会AI生成React与Vue组件代码,相当于给团队请了一位熟悉双料施工规范的设计师,批量产出风格统一、开箱即用的组件,让前端交付效率翻倍。

目录
  1. 可视化演示
  2. 双框架差异
  3. Props设计约定
  4. 组合式API适配
  5. 可维护性考量
  6. AI生成策略
  7. 团队规范落地
  8. 问题排查实践
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示AI生成React与Vue组件的结构差异、Props流向及生成流水线,切换模式查看不同维度对比。

本节配有交互动效(进入视口后自动加载,约 3KB)。

组件结构对比 React: JSX+Hooks Vue: SFC+Composition fn(props)→JSX | SFC: tpl+script AI可生成两种组件结构

双框架差异

智能设计师的绘图板上铺着两张图纸。左手边是给乐高自由拼装之家的“拼装说明书”:图纸上是一块块标好尺寸的积木,标着“接口朝上”“卡扣朝右”,拼装工人只需按图把积木逐块对接。右手边是给精装样板间之家的“家具摆放图”:房子的结构、水电管线已经画好,设计师要做的只是在预留好的墙面上标注“这里挂画”“那里放沙发”。

把图纸换成代码,就是React与Vue的底层哲学差异。React把组件看成一个纯函数:输入props(父组件传入的数据),经过JSX渲染(在JavaScript里写HTML的语法糖),输出UI。所以AI生成React组件时,核心任务是把函数签名设计好、把hooks(React的状态钩子函数)调用顺序排对、把JSX结构搭出来,剩下的一切自由组合。Vue则把组件看成一个模板骨架:<template>里的HTML加上指令(v-for、v-if、@click),配合<script setup>里的数据和函数。AI生成Vue组件时,关注的是模板指令是否规范、响应式数据是否声明正确。

具体到状态管理,React用useState、useReducer管理内部状态,组件一变数据就重渲染;Vue用ref、reactive声明响应式数据,依赖变化自动更新视图。外部状态管理也一样——React侧常用Redux/Zustand,Vue侧是Pinia。这些差异直接决定了AI的生成策略:生成React代码必须遵守“hooks不能写在条件语句里”的军规;生成Vue代码则要保证指令语法完整、v-model绑定正确,否则模板直接编译报错。

f(props)→JSXUI\displaystyle f(\text{props}) \xrightarrow{\text{JSX}} \text{UI}

1. f 函数名:代表组件本身,比如UserCard,AI会帮你取一个语义清晰的名字。

f\displaystyle f

2. props 入参:父组件传入的数据,是组件的“原料”。

props\displaystyle \text{props}

3. JSX 加工车间:React的语法糖,让JavaScript里能写HTML结构。

JSX\displaystyle \text{JSX}

4. UI 成品:最终呈现在浏览器里的界面。

UI\displaystyle \text{UI}

所以,当你让AI“生成一个React按钮组件”和“生成一个Vue按钮组件”,得到的图纸完全不是同一种语言:前者是积木拼装手册,后者是样板间摆设图。懂了这一点,你就拿到了区分双框架生成代码的第一把钥匙。

Props设计约定

装修设计图里,家具好不好挪动不重要,插座和接口位置才是灵魂。设计师会给乐高之家和样板间之家都预留一批“插座”——它们是两个房子之间传递信息的天线。为了让后期所有智能设备一插即用,设计师规定:所有插座必须标注统一的名字、要有默认状态、要对号入座区分用途。

这些“插座”在组件世界里就是props——父组件向子组件传递数据的唯一官方通道。AI生成组件时最容易踩的坑,就是props命名随心所欲、默认值缺失、类型不分。团队如果建立一套Props设计约定,AI就像拿到了插座国家标准,生成代码的准确率立刻上一个台阶。

约定包括三件套。第一,命名规范:React中props用camelCase(userName),而Vue模板里引用props时习惯用kebab-case(user-name),AI生成Vue组件时要把模板标签和script里的命名自动转换对齐。第二,默认值:React用defaultProps或函数参数默认值兜底,Vue在defineProps里配default字段,避免undefined导致渲染崩裂。第三,类型校验:React用PropTypes或TypeScript接口约束,Vue用type字段声明,让错误在编译期而不是运行期暴雷。再加一条铁律——props是单向数据流,子组件只有读权限,要改数据必须通过回调事件向上申请。

camelCase⟼kebab-case\displaystyle \text{camelCase} \longmapsto \text{kebab-case}

1. camelCase 驼峰命名:userName这种首单词小写、后续单词首字母大写的写法。

camelCase\displaystyle \text{camelCase}

2. 映射符号:表示“转换”动作,AI在做代码翻译时发生的变换。

⟼\displaystyle \longmapsto

3. kebab-case 连字符命名:user-name这种用短横线连接的写法,HTML标签属性不区分大小写,必须靠它做区分。

kebab-case\displaystyle \text{kebab-case}

当AI生成的组件props命名、默认值、类型全部对齐这套“插座标准”时,你会发现自己像拿到了一盒标准化智能家居——任何一个组件插到任何页面里,即插即用,永不报错。

组合式API适配

住过几年的样板间之家想改户型,把书房改成儿童房,最头疼的不是搬家具,而是水电管线大挪移。Vue 3的设计师想了个妙招:给每个家配备一个“改造工坊”——setup函数。你想动哪块功能,就把相关的状态、方法、计算属性打包丢进工坊一次性处理,不用翻遍整个房子的墙壁布线。

这个“工坊”就是组合式API(Composition API)。AI生成Vue组件时,如果遇到“把某段逻辑抽出去复用”的需求,会把相关的ref、computed、函数封装成一个composable(组合式函数)。而React平台对应的是自定义hook(useXXX)。二者的名字都带了use两字,但使用方式不同:React hook在函数组件主体里调用;Vue composable在setup或script setup里调用。

生命周期对应关系,AI也应该门儿清:React的useEffect负责“数据变化后干活”,Vue里对应watch、onMounted、onUnmounted。响应式声明上,React的useState返回数组,Vue的ref返回带.value的响应式对象、reactive适合嵌套对象结构。生成代码时还要遵守命名约定:React自定义hooks一律use开头,Vue组合式函数用use前缀统一风格,让团队成员扫一眼文件名就知道这段逻辑是不是可复用的功能块。

setup(props)={state,computed,methods}\displaystyle \text{setup}(\text{props}) = \{ \text{state}, \text{computed}, \text{methods} \}

1. setup 入口函数:Vue组件里的“改造工坊”,所有逻辑都在这里组织。

setup\displaystyle \text{setup}

2. props 外部传入:组件接收的props在此出场,作为工坊的原材料。

props\displaystyle \text{props}

3. state 状态集合:ref和reactive声明的响应式数据,变化会驱动视图刷新。

state\displaystyle \text{state}

4. computed 计算属性:由已有状态推导出的值,自动缓存。

computed\displaystyle \text{computed}

5. methods 方法集合:事件处理、业务逻辑函数,打包返回给模板调用。

methods\displaystyle \text{methods}

有了这个工坊意识,AI生成Vue组件就不再是机械地堆模板,而是像经验丰富的改造师傅——把相关管线集中走好,把无关线路留在墙外,后期维护的人一打开setup,就能顺着工坊的流水线把逻辑理清楚。

可维护性考量

一套房子装修完,最考验设计师功力的是三年后:新来的木工拿着图纸,能不能一眼看懂每个柜子为什么在这里、水电为什么这么走?AI生成组件同理——代码不只是给浏览器跑的,更是给团队里的同事和三个月后的自己读的。

可维护性考量第一件事是组件拆分粒度。一个组件该拆多大?拆太粗成了一个三百行的巨型怪兽,拆太细满屏碎片组件反而灾难。业界常用“复用指数”来量化:组件被使用的次数越多、与外部耦合越少,就越值得独立成组件。

第二是目录结构规约。建议每个组件一个目录,内部放index文件、样式文件、测试文件,组件间互不串门。第三是注释文档同步,AI生成组件时主动输出JSDoc注释(说明props含义、事件回调类型),再配一份简短README,把组件用途、用法例子写清楚。第四是代码规范统一,ESLint和Prettier配置进项目,AI生成的代码也要过同一把“尺子”,风格跟手写代码完全一致。

R=U×IC\displaystyle R = \frac{U \times I}{C}

1. U 使用次数:组件在项目中出现的频率,出现越多越有价值抽离。

U\displaystyle U

2. I 独立性评分:组件自身功能完整、不依赖外部环境的程度。

I\displaystyle I

3. C 耦合度:组件对其他组件、全局状态的依赖程度,越高越难维护。

C\displaystyle C

把这套“给未来木工看的图纸标准”写进AI的生成指令里,团队的组件库会像一户越住越舒服的房子——每个组件的位置都有道理,每一行代码都有注释照应,新成员上手就能跟着图纸干活。

AI生成策略

同一个智能设计师,有人要来的图纸一步到位,有人要来的图纸能气哭施工队。差距不在设计师,而在提需求的人。你说“给我整一个好看的列表”,设计师只能给你一张充满想象空间的模糊草图;你说“我要一个用户列表,展示头像、昵称、注册时间,支持分页,用React+TypeScript,样式参照现有Card组件”,设计师立刻哗哗哗画出一张可施工图。

有效的AI生成策略四步走。第一步提示词设计:给AI一个清晰的角色定位(资深前端工程师)、明确的需求(组件功能清单)、硬性约束(框架版本、语言、样式方案),最好是附上简短示例。第二步上下文注入:把团队代码规范、现有同类组件的代码贴给AI,它就能模仿出同款风格,而不是凭空发明第三种风格。

第三步模板脚手架:提前把CRUD表格、表单弹窗这类高频组件做成固定模板,AI在模板上改参数而不是从零生成,精度大幅提升。第四步迭代校验反馈:AI生成代码后跑一遍lint和单测,把报错信息原样回传给AI让它修复,形成“生成→校验→反馈→修复”的闭环。这套策略的核心,是把AI当作一位“你越懂行、它越靠谱”的实习设计师,靠流程管理而不是靠运气。

Q=A×BV\displaystyle Q = \frac{A \times B}{V}

1. A 上下文信息量:注入给AI的规范文档与示例代码,信息越足,AI越懂你的口味。

A\displaystyle A

2. B 模板匹配度:生成任务与已有脚手架模板的契合程度,模板复用度越高质量越稳。

B\displaystyle B

3. V 需求模糊度:描述里没说明白的地方,AI只能靠猜,模糊度越高质量越差。

V\displaystyle V

向AI提需求,本质上是向一位高智商但没见过你家房子的实习设计师交底。你把插座位置、家具尺寸、风格偏好讲得越具体,返还给你的图纸就越少返工。这一套“交底策略”,就是AI生成策略的全部秘密。

团队规范落地

一个小区,如果每家装修各搞各的,三年后楼道里就是灾难现场。只有物业出一本《装修管理手册》,规定管线走向、外墙颜色、空调机位,整个小区才能住出协调感。团队用AI生成组件也是同一个道理——需要一本“统一生成约定手册”。

手册第一步是统一生成约定:把前面几节聊的Props设计约定、组合式API写法、目录结构、注释格式全部文档化,写进团队wiki并同步给AI。AI生成代码时的提示词模板里直接引用手册规范。第二步是验收标准定义:什么算“合格生成”?给出硬指标——能编译通过、eslint零报错、有测试、有文档、Props有类型和默认值,五条全过才允许合入。

第三步是代码检查集成:把eslint、prettier、typescript检查挂进CI流水线,AI提交的代码自动跑一遍,不达标直接打回。第四步是版本管理同步:AI生成的代码不能绕过Git review流程,所有变更走合并请求评审,至少一位人类工程师把关,防止AI批量生产“能跑但没人看得懂”的代码。有了这四条,AI生成组件就从“个人实验”升级为“团队工艺”。

T=NpassNtotal×100%\displaystyle T = \frac{N_{\text{pass}}}{N_{\text{total}}} \times 100\%

1. N_pass 通过次数:完整通过验收标准(编译、lint、测试、文档)的生成次数。

Npass\displaystyle N_{\text{pass}}

2. N_total 总生成次数:AI生成的全部尝试次数,包含反复迭代修改。

Ntotal\displaystyle N_{\text{total}}

3. 100% 百分比换算:把通过率换算成直观的百分比数值,便于团队设定质量门槛。

×100%\displaystyle \times 100\%

当这本“物业手册”落地,AI生成的组件就像小区里整齐划一的外立面:每一个Props都有类型,每一段逻辑都在它该在的工坊里,每一位工程师都能无障碍接手。从此,AI不再是快枪手,而是团队里守规矩的正式工。

问题排查实践

再好的设计师也有翻车的时候。装修返工现场,你最常听到四句口头禅:“这智能锁怎么跟门对不上?”“这灯怎么不亮?”“这螺丝是不是少给了?”“这网怎么这么卡?”AI生成的组件代码,翻车现场也基本是这四类。

第一类,“门对不上”——兼容性问题。AI生成代码用了项目根本不支持的高版本API,比如Node或浏览器版本过旧,跑起来直接白屏。排查方法是看编译错误信息,把项目package.json里的依赖版本喂给AI,让它按版本约束重新生成。第二类,“灯不亮”——状态更新丢失。React里常见的坑是忘了展开……props导致子组件数据不同步;Vue里则是给ref赋值.value写漏了,视图纹丝不动。第三类,“螺丝少给”——依赖缺失。AI用到了lodash的_.debounce却没装包,import直接报红,补装依赖即可。

第四类,“网太卡”——性能问题。React大列表没给key、组件没甩memo,Vue列表渲染没用v-memo、计算属性写成了方法每次渲染都重新算。性能排查优先打开浏览器Performance面板,定位高频渲染的组件,再对症上memo/缓存。把这些高频问题整理成一份“返工记录表”喂回给AI,它在未来生成时就会主动避开这些坑。

S=1−NmemoNnormal\displaystyle S = 1 - \frac{N_{\text{memo}}}{N_{\text{normal}}}

1. S 节省率:衡量性能优化成效的核心指标,越接近1说明优化越彻底。

S\displaystyle S

2. N_memo 优化后次数:应用memo/缓存后组件实际重渲染的次数。

Nmemo\displaystyle N_{\text{memo}}

3. N_normal 优化前次数:未优化时组件的重渲染次数,作为对比基准。

Nnormal\displaystyle N_{\text{normal}}

装修回访时,聪明的设计师会把每一张返工单都钉在墙上看一眼。AI生成组件的团队也一样,把遇到过的坑沉淀成记录,让AI带着“前车之鉴”出图——返工次数会指数级下降,组件生产正式进入“越用越顺”的正循环。

AI 应用场景

新项目组件库批量生成

阶段:代码生成与工程化

解决的问题:传统方式手写二十个基础组件需要两人周,且React与Vue两套技术栈要写两遍,命名风格还容易漂移。AI按Props设计约定和双框架差异知识,一次需求描述产出双版本组件,风格天然统一。

具体案例:一家SaaS创业公司启动中后台管理系统,工程师在提示词里注入团队规范:“用React+TS生成带搜索、分页、筛选的表格组件,Props命名用camelCase、带默认值和类型”;AI产出React版本后,再用同一份规格生成Vue 3+setup版本。两个版本Props命名、默认值、类型定义完全对齐,两天完成原本两周的组件库搭建。

存量项目Vue 2迁移Vue 3

阶段:代码迁移与重构适配

解决的问题:三百个Vue 2组件迁移,传统人工改造成本极高且容易漏改生命周期钩子。AI基于组合式API适配规则,把选项式写法批量改写成setup工坊结构。

具体案例:某团队把data、computed、methods平铺结构迁移到setup,AI自动将created对应onMounted、watch对应watchEffect、props定义迁移到defineProps,每个组件迁移后跑一遍单元测试,三周完成全部迁移,回归缺陷率比手改低四成。

Python 演示

python55 行
# -*- coding: utf-8 -*-"""AI生成React组件代码的规范校对器""" import re  class ReactAuditor:    """检查AI生成的React组件是否符合团队规范"""     def __init__(self, code):        self.code = code        self.issues = []        self._count = 0     def check_props_naming(self):        self._count += 1        if re.search(r"interface\s+\w+_\w+Props", self.code):            self.issues.append("Props类型名称应使用camelCase 如UserCardProps")     def check_default_values(self):        self._count += 1        if "function" in self.code and "defaultProps" not in self.code:            self.issues.append("函数组件建议通过defaultProps声明默认值")     def check_hooks_rules(self):        self._count += 1        in_condition = False        for line in self.code.splitlines():            if re.match(r"\s*(if|for|while)", line):                in_condition = True            if in_condition and re.search(r"use(State|Effect|Ref)\(", line):                self.issues.append("Hooks不允许在条件语句中调用")     def run(self):        self.check_props_naming()        self.check_default_values()        self.check_hooks_rules()        return self.issues  if __name__ == "__main__":    sample = '''interface User_InfoProps {    user_name: string}function UserCard(props: User_InfoProps) {    if (props.user_name) {        const [count, setCount] = useState(0)    }    return <div>{props.user_name}</div>}'''    auditor = ReactAuditor(sample)    for issue in auditor.run():        print(issue)
目的:这是团队“AI生成规范”落地的迷你版——用正则扫描AI生成的React组件代码,自动揪出Props命名违规、缺少默认值、Hooks写在条件语句里三类高频问题。
  1. re.search(r"interface\s+\w+_\w+Props", self.code)用正则抓出违反camelCase的Props类型名,比如User_InfoProps
  2. re.match(r"\s*(if|for|while)", line)识别当前行是否进入条件分支,为Hooks规则检查做铺垫
  3. re.search(r"use(State|Effect|Ref)\(", line)在条件分支内发现useState等调用,立即记一条违规
  4. auditor.run()依次执行全部检查项,返回问题清单
  5. print(issue)把每条违规打印出来,供工程师或AI迭代修复

常见误区

误区我告诉AI“用React写个按钮”,它生成的代码应该就能直接用了,框架选对就行,其他不用管。

正解框架对了只是第一步。React要检查hooks调用规则、JSX闭合、状态管理方案;Vue要检查指令语法、script setup写法、样式scoped。两套生态的写法约定、构建工具链都不一样,生搬硬套必翻车。就像装修选了“乐高风”还不够,每块积木的卡扣对不对得上才是关键。

为何常见:初学者以为React和Vue只是语法不同,忽略了背后的组件模型哲学差异。

误区既然JS里都推荐camelCase,那Vue模板里的props也全用驼峰命名最规范,AI生成时直接写userName就行。

正解HTML标签属性不区分大小写,模板里写user-name这种kebab-case才可靠。JS侧的props定义可以用camelCase,但模板引用必须转换。AI生成代码时要注意这个自动转换,否则出现“定义是驼峰、模板写驼峰”的隐性bug——浏览器会把大写字母悄悄转成小写,对不上号。

为何常见:习惯了JS纯脚本命名,忽略了模板与JS两个世界的边界。

误区AI生成的组件能编译、eslint也通过,直接合入就行,剩下的交给CI。

正解测试和lint只保证不炸,不能保证可维护性。还要人工评审Props设计是否合理、组件拆分粒度是否恰当、注释文档是否完善,这些软指标恰恰是AI最容易偷懒的地方。就像验收装修只看墙没裂、灯能亮,不看插座位置合不合理,住进去才后悔。

为何常见:把“能跑”当成了“好”,忽略了工程质量的长期维度。

误区AI生成效率高,一口气生成几十个组件,项目进度飞起,产出越多越好。

正解生成的组件如果没有统一规范约束,风格会散成一片,后期维护成本爆炸。应该先制定Props设计约定和生成规范,小步试跑一个组件验证质量,再批量生产。就像小区先出物业手册再让各家装修,而不是各家先装完再统一风格。

为何常见:被效率冲昏头脑,忽视了规范先行的工程常识。

面试题

Q1. React组件本质上是?

单选题 · easy

  • A.一个纯函数输入props输出UI← 正确答案
  • B.一个模板加脚本的组合文件
  • C.一个包含样式的类名结构
  • D.一个响应式数据声明对象

答案:A。React组件是"f(props)→UI"的纯函数,这是它和Vue模板组件最本质的区别。B是Vue SFC的描述,C和D与React组件模型无关。

Q2. Vue模板中引用props的正确命名方式是?

单选题 · easy

  • A.camelCase如userName
  • B.kebab-case如user-name← 正确答案
  • C.snake_case如user_name
  • D.PascalCase如UserName

答案:B。HTML标签属性不区分大小写,模板里必须用kebab-case。camelCase只在JS的props定义里用,AI生成时要做这个自动转换。

Q3. 关于组件Props的单向数据流,正确的是?

单选题 · mid

  • A.子组件可以直接修改props的值
  • B.子组件只能读,改数据需回调← 正确答案
  • C.props可以在任何组件间双向绑定
  • D.props只在组件内部初始时有效

答案:B。单向数据流是铁律,子组件只有读权限。要改数据得通过父组件传入的回调事件向上申请,这是Vue的emit和React的onXxx回调都遵循的约定。

Q4. AI生成React组件时需重点检查哪些规范?

多选题 · mid

  • A.Hooks不能在条件语句中调用← 正确答案
  • B.JSX标签必须正确闭合← 正确答案
  • C.defaultProps可选非必备← 正确答案
  • D.必须使用Vue模板指令

答案:ABC。A是hooks军规,B是JSX基本要求,C是可选优化项。D是Vue的东西,React里没有模板指令,A、B、C是React审查重点。

Q5. Vue 3中setup函数的作用是?

单选题 · easy

  • A.只是初始化数据的入口
  • B.组织状态计算属性方法的工坊← 正确答案
  • C.替代模板渲染的位置区域
  • D.定义样式作用域的标记

答案:B。setup是组合式API入口,把state、computed、methods打包返回给模板使用,类似“改造工坊”,把功能相关逻辑集中处理。

Q6. 以下关于React hook与Vue组合式函数的对比正确的是?

多选题 · hard

  • A.React hook在函数组件内调用← 正确答案
  • B.Vue composable在setup内调用← 正确答案
  • C.两者都要求名称以use开头← 正确答案
  • D.两者生命周期机制完全相同

答案:ABC。React hook在函数组件里调用,Vue composable在setup调用,两者约定都是use前缀。但生命周期机制不同,React的useEffect和Vue的watch/onMounted对应关系需要AI特别处理,D错误。

Q7. 组件复用指数R = U×I/C中,U代表什么?

单选题 · hard

  • A.组件使用次数← 正确答案
  • B.组件独立性
  • C.组件耦合度
  • D.组件代码行数

答案:A。U是使用次数,使用频次越高越值得抽成独立组件。I是独立性,C是耦合度,这三个因子共同决定一个组件该不该独立。

Q8. AI生成策略中“上下文注入”的作用是?

单选题 · mid

  • A.让AI模仿团队现有代码风格← 正确答案
  • B.提高AI的模型推理速度
  • C.减少请求的Token消耗
  • D.替代人工评审代码质量

答案:A。把团队规范和现有组件代码喂给AI,它就能产出同风格代码,就像给设计师看小区其他家的装修照片。其他选项与上下文注入的语义无关。

Q9. 团队让AI生成组件落地时,验收标准应包含哪些?

多选题 · hard

  • A.编译通过且eslint零报错← 正确答案
  • B.具备测试用例覆盖保证← 正确答案
  • C.Props具备类型和默认值← 正确答案
  • D.代码行数必须大于500行

答案:ABC。编译、测试、类型和默认值是硬指标,是“可运行”的底线。代码行数与质量无正相关,D错误,巨型组件恰恰违背可维护性拆分原则。

Q10. 排查AI生成Vue组件“数据改变了视图没更新”的问题,最可能的原因?

单选题 · extreme

  • A.修改ref时漏写.value← 正确答案
  • B.没有安装lodash类库
  • C.JSX标签未正确闭合
  • D.组件没写defaultProps

答案:A。Vue 3的ref是对象,改值必须写.value,漏写是高频翻车点。“灯不亮”类状态更新丢失的问题,八成出在这里。B是依赖缺失,C是React问题,D不影响响应式更新。