Vue.js 设计与实现 - 06 原始值的响应式方案

原始值指的是 Boolean、Number、String、Symbol、BigInt、Null 和 Undefined 等类型的值。在 JS 中,原始值是按值传递的,这意味着,如果一个函数接受原始值作为参数,那么形参和实参之间没有引用关系,它们是两个完全独立的值,对形参的修改不会影响实参。另外,JS 中的 Proxy 无法提供对原始值的代理,必须对其进行包装,才能实现对原始值的代理。

原始值 按值传递 形参 实参 包装

第二篇 响应系统

6.1 引入 ref 的概念

对于原始值,我们可以使用 ref 函数来创建一个包装对象,从而实现对原始值的响应式。

再为该包装对象添加属性 __v_isRef 用于区分普通对象和 ref 对象。

6.2 响应丢失的问题

对一个响应式对象做 ... 展开操作时,会丢失响应性。

6.3 自动脱 ref

总结