惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
J
Java Code Geeks
Blog — PlanetScale
Blog — PlanetScale
F
Fortinet All Blogs
腾讯CDC
大猫的无限游戏
大猫的无限游戏
Jina AI
Jina AI
WordPress大学
WordPress大学
雷峰网
雷峰网
小众软件
小众软件
D
DataBreaches.Net
V
Visual Studio Blog
博客园 - Franky
IT之家
IT之家
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
B
Blog RSS Feed
博客园 - 聂微东
T
Tailwind CSS Blog
有赞技术团队
有赞技术团队
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Security Blog
Microsoft Security Blog
G
Google Developers Blog
云风的 BLOG
云风的 BLOG

Vue.js

AI 特效 shadcn-vue-admin 已升级至 vite8 我真的要放弃 Vue,改用 React 了 请问 vue3 的 onclick 和 @click 有什么区别 求推荐美观、功能全的 vue AI chat 组件 [求助贴] 有没有推荐的 vue3 页面设计器 大屏设计器(源码可以拿来二开的 开源 or 收费) 有没有大佬在正式项目里使用 rolldown 了 用 reactive 來實現 oo 對象的封裝 Vue 的 reactive 会有人专门用吗? 大佬们,想在 vue 中集成一个 excel,有什么方案? vue3 无法手动控制 keepalive 的缓存| fork 了独立的 keep-alive 组件|支持手动删除缓存或者添加缓存 WebStorm 写 个 v-for, cpu 就狂飙 Nuxt UI 4 可以免费用 Pro 了 Vue2 除了 ele-table-editor,还有没有其他“子表单(inline-formset)”的组件? 请问 vue 的 defineEmits 类型如何使用动态键名 VUE 开发求助 屎代码靠我自己骂已经不解气了,佬们来看个笑话 我的 mp4 播放不出来! 有一个 8K 行的 VUE 代码文件用什么 AI 可以解耦 uniapp 求助 Vue3 编写的最佳实践是怎样的? 开发一款轻便简洁的论坛程序 VueConf 2025 所有演讲嘉宾及日程已确定, 7 月 12 日,深圳见! vue3+ELInput 无法输入的问题 想问一下 pinia 持久化到 localStorage 如何实现有效期 有什么适用于 Vue/Nuxt 的表单/问卷/试卷+设计器库么 vue_cli 用到 env 环境变量值特殊字符处理 统计基于 vue 的汽水音乐电脑版用了哪些开源组件 ant-design-vue 好像不怎么维护了, vue 有什么比较靠谱的 ui 组件库吗 关于二次封装 element-plus 组件库主题问题
求助 Vue 大佬,为什么使用 reactive 数据没有双向绑定?
liuliancc · 2025-07-21 · via Vue.js

萌新小白请教,不太明白为什么使用 ref 数据可以双向绑定,使用 reactive 数据无法双向绑定?是我用法不对吗?
到底什么时候应该使用 ref 什么时候应该使用 reactive 呢?

https://play.vuejs.org/#eNp9U8Fu00AQ/ZXRXmJEsIVAHCInElQ9wAEqijj54tqTdMt6d2Wv3UCUOzeEOMAHIHFC8AP8De13MDubpNu09GLtzrx582b9ZiWeWpsOPYqJyLuqldZBh663s0LLxprWwQpanI/pU1ZODghrmLemgREVjXagA9PYTTzN/MVzUrrQWQaV0R3RuvcKD4yeywVMPWey4izMjXbH8gNO4OETjqzvFfr2miDBF+6X+Zo8CxOQdro4bKwqHdINILcwYbJpIVZRadQg3UbhPozscrQuxOzy4+fLb78ufn79++dLnvlHISqedXjQmBoV0UUUhYCMMHkW9RZj4Tqaxnc464ymh2b5haiIRypsX1knadpCTIAzPlcqZc5fcMy1PY638eoUq3e3xM+6pY8V4qjFDtsBC7HLubJdoAvpw+OXuKTzLklT9IrQdyRfY2dU7zUG2LNe1yQ7wrHa5+wEqRdvusOlQ91th/JCPXLN+EKQM/wT/m/0K7mP0sdcR3+XXnHrqn2ngir1gv6DI5rrrg1uGcN56arTPd8SUDts52WFcBy5bM9aum9OaFRNGuKKo9bYLmDZBm9L1RM6IuKSYGLL4CnUOJcauTTn7ywh08a0h410G9qE6Ea9rclEk6sWozEMN1rdm8BgZB11ROLZNWTSnL+bhgGkTFWqG7uVR8SzZAVpmrL+9EoE72eh+VWTiGUMicbzjSaYzsIgXkty6yRMvqtg1rWP1og2uIZjd211LQc+0FGVJ6hmYVUvvv+4+P0pz0JsA5Da9i7a20j5bvU3C0zoLFBfX+X1P0Ky0Q8=

直接展示代码:

App.vue

<script setup>
import { ref, reactive } from 'vue'
import Comp from './Comp.vue'

// const styleConfig = ref({
//  fontSize: 16
// })
const styleConfig = reactive({
  fontSize: 16
})
</script>

<template>
  <p :style="{ fontSize: styleConfig.fontSize + 'px'}">我是字体</p>
  <Comp v-model="styleConfig" />
</template>

Comp.vue

<script setup lang="ts">
import { reactive, watch } from 'vue'

interface StyleConfig {
  fontSize: number
}

interface Props {
  modelValue: StyleConfig
}
const props = defineProps<Props>()

interface Emits {
  (e: 'update:modelValue', value: StyleConfig): void
}
const emit = defineEmits<Emits>()

const localConfig = reactive<StyleConfig>({ ...props.modelValue })

watch(localConfig, (newConfig) => {
  emit('update:modelValue', { ...newConfig })
}, { deep: true })
</script>

<template>
  <div>
    <label>字体大小</label>
    <input v-model="localConfig.fontSize" />
  </div>
</template>