Vue 的 reactive 会有人专门用吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sikuu2al
V2EX    Vue.js

Vue 的 reactive 会有人专门用吗?

  •  
  •   sikuu2al 3 天前 1492 次点击

    突然发现好像什么项目写变量都是 ref 一把梭了,没有专门用过这个 reactive 。op 记得刚学的时候还是非常仔细的区分变量类型的,是对象就用 reactive 。

    14 条回复    2025-11-13 16:06:42 +08:00
    shintendo
        1
    shintendo  
       3 天前
    有,我们 vue2 遗老当 data 用
    1024629941CJJ
        2
    1024629941CJJ  
       3 天前
    不想写.value 就用
    LPJD
        3
    LPJD  
       3 天前
    ai 提供的代码有区分,开源项目也在用,应该还是有区别的
    hervey0424
        4
    hervey0424  
       3 天前   1
    const state = reactive({})
    crocoBaby
        5
    crocoBaby  
       3 天前
    @hervey0424 +1,后面觉得太臃肿了,每次改变滚轮都要滚出火星子,又切回 ref 了
    Ketteiron
        6
    Ketteiron  
       3 天前   2
    简单变量肯定全是 ref ,我先假设你指的是对象用 reactive 还是 ref 包裹。
    如果你写了很多 usehooks ,或许会发现 reactive 比 ref 更好用。
    例如简化业务逻辑经常会自行封装 useTable/useForm 等参数,然后传递 api 类型,用泛型推断出参数和返回值类型。
    此时可以用这样的写法
    const params = reactive({}) as T
    const model = reactive({}) as K
    暂时用空对象欺骗下 ts 推断正确类型
    而不是得到 T | null ,不得不写没必要的可选链,只要源头的类型是正确的,那么运行时实际也是安全的。
    4seasons
        7
    4seasons  
       3 天前
    u1s1 ,vue3 的响应式真就感觉设计的挺差强人意的
    jy02534655
        8
    jy02534655  
       3 天前
    写列表和写表单的时候都用呀
    c3de3f21
        9
    c3de3f21  
       3 天前   1
    export function ref<T>(
    value: T,
    ): [T] extends [Ref] ? IfAny<T, Ref<T>, T> : Ref<UnwrapRef<T>, UnwrapRef<T> | T>
    export function ref<T = any>(): Ref<T | undefined>
    export function ref(value?: unknown) {
    return createRef(value, false)
    }

    function createRef(rawValue: unknown, shallow: boolean) {
    if (isRef(rawValue)) {
    return rawValue
    }
    return new RefImpl(rawValue, shallow)
    }

    class RefImpl<T = any> {

    constructor(value: T, isShallow: boolean) {
    this._rawValue = isShallow ? value : toRaw(value)
    this._value = isShallow ? value : toReactive(value)
    this[ReactiveFlags.IS_SHALLOW] = isShallow
    }

    }

    export const toReactive = <T extends unknown>(value: T): T =>
    isObject(value) ? reactive(value) : value
    shakaraka
        10
    shakaraka  
    PRO
       3 天前
    vue 真的心智负担太大了。直接 signal 吧真的。
    duuu
        11
    duuu  
       3 天前
    ref 一把梭了。如果写 reactive 反而有心智负担需要考虑要不要.value 。
    tog
        12
    tog  
       3 天前

    写 hooks 必用的啊
    mizuhashi
        13
    mizuhashi  
       3 天前
    reactive 可以用展平 ref ,我用封象:

    function useXXX() {
    const r = ref('xx')
    const c = computed(() => r.value + 'yy')
    function f() { r.value = 'zz' }
    return reactive({
    r,
    c,
    f
    })
    }
    metadata
        14
    metadata  
       2 天前
    我记得 vue3 刚出来的时候,ref 和 reactive 在功能和性能上是有明显区别的,我也是分开写的。后来有个大佬把 ref 重写了,性能提升非常多,然后尤雨溪说可以用 ref 一把梭,然后我就再也没用过 reactive
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2063 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 00:43 PVG 08:43 LAX 16:43 JFK 19:43
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86