面试题答案
一键面试可能遇到的关键问题
- 模板语法差异
- v - bind.sync 修饰符变化:Vue 2 中
v - bind.sync
用于双向绑定一个 prop 并更新父组件数据。Vue 3 移除了v - bind.sync
,需使用v - model
替代。例如在 Vue 2 中<ChildComponent :title.sync="parentTitle" />
,Vue 3 需写成<ChildComponent v - model:title="parentTitle" />
。 - slot 语法变化:Vue 2 具名插槽使用
slot
属性,作用域插槽使用slot - scope
。Vue 3 具名插槽使用v - slot
指令,作用域插槽语法也用v - slot
。如 Vue 2 中<template slot="header" slot - scope="props">...</template>
,Vue 3 变为<template v - slot:header="props">...</template>
。
- v - bind.sync 修饰符变化:Vue 2 中
- 指令系统差异
- v - on.native 修饰符移除:Vue 2 中
v - on.native
用于给组件绑定原生事件。Vue 3 移除了该修饰符,需在组件内部通过$emit
触发原生事件,然后在父组件监听。例如 Vue 2 中<ChildComponent @click.native="handleClick" />
,Vue 3 需在ChildComponent
内this.$emit('click')
,父组件<ChildComponent @click="handleClick" />
。 - v - model 修饰符变化:Vue 2 的
v - model
有.lazy
、.number
、.trim
修饰符。Vue 3 中,.number
和.trim
行为不变,但.lazy
需用v - model:value.lazy
这种方式。如 Vue 2 中<input v - model.lazy="data" />
,Vue 3 变为<input v - model:value.lazy="data" />
。
- v - on.native 修饰符移除:Vue 2 中
应对策略
- 模板语法差异应对
- v - bind.sync 替换:全局搜索项目中所有使用
v - bind.sync
的地方,按照新语法v - model
进行替换,并确保子组件正确处理update:propName
事件为emit('update:propName', newValue)
。 - slot 语法替换:同样进行全局搜索,将
slot
属性和slot - scope
语法替换为v - slot
语法。对于复杂的作用域插槽,仔细检查传递的属性是否正确。
- v - bind.sync 替换:全局搜索项目中所有使用
- 指令系统差异应对
- v - on.native 移除处理:在涉及到给组件绑定原生事件的地方,在子组件内部添加
$emit
触发相应事件,在父组件移除native
修饰符并直接监听事件。 - v - model 修饰符调整:对于
v - model
修饰符,按照 Vue 3 的语法格式进行调整,特别是.lazy
修饰符的使用方式。
- v - on.native 移除处理:在涉及到给组件绑定原生事件的地方,在子组件内部添加
保证业务逻辑正确性和最小化对原有功能影响
- 全面测试
- 单元测试:迁移前确保项目有完善的单元测试覆盖。迁移过程中,对于修改的组件和逻辑,更新单元测试用例,确保功能符合预期。例如针对使用了双向绑定的组件,在单元测试中验证
v - model
新语法下数据的正确更新。 - 集成测试:运行集成测试,检查组件之间的交互是否正常。如测试父子组件间通过
v - model
或事件传递数据的流程是否正确。 - 端到端测试:使用工具如 Cypress 或 Puppeteer 进行端到端测试,模拟用户真实操作场景,确保整个业务流程不受迁移影响。例如测试表单提交、页面跳转等功能。
- 单元测试:迁移前确保项目有完善的单元测试覆盖。迁移过程中,对于修改的组件和逻辑,更新单元测试用例,确保功能符合预期。例如针对使用了双向绑定的组件,在单元测试中验证
- 逐步迁移
- 模块划分:将项目划分为不同的模块,按照模块的重要性、复杂度和依赖关系,逐步迁移模块。例如先迁移相对独立的基础组件模块,再迁移业务核心模块。
- 版本控制:在迁移过程中,利用版本控制系统(如 Git),每次迁移一个模块后进行一次提交,方便回滚。如果在迁移某个模块后发现问题,可以快速回滚到上一个稳定版本。
- 代码审查
- 同行审查:在迁移过程中,组织团队成员进行代码审查。审查人员重点关注模板语法和指令系统的变化是否正确应用,业务逻辑在新语法下是否依然正确。例如审查
v - model
新语法是否会导致数据更新逻辑错误。
- 同行审查:在迁移过程中,组织团队成员进行代码审查。审查人员重点关注模板语法和指令系统的变化是否正确应用,业务逻辑在新语法下是否依然正确。例如审查