什么时候用ref,什么时候用reactive?

官方文档及尤雨溪提到过 ,ref 一把梭,不建议用 reactive。我说的话不可信,尤雨溪的话百分百可信,用,用,用ref一把梭。

ref - 你的"万能工具箱"

javascript 复制代码
// 什么都能装!
const name = ref('张三')        // ✅ 字符串
const age = ref(18)            // ✅ 数字  
const isLoading = ref(false)   // ✅ 布尔值
const user = ref({name: '李四'}) // ✅ 对象
const list = ref([])           // ✅ 数组

// 用的时候要加 .value
name.value = '王五'
age.value = 20

reactive - 你的"对象专用盒"

javascript 复制代码
// 只能装对象!
const user = reactive({        // ✅ 对象
  name: '张三',
  age: 18
})

const form = reactive({        // ✅ 对象  
  username: '',
  password: ''
})

const list = reactive([])      // ✅ 数组(其实也是对象)

// 用的时候直接点属性
user.name = '李四'
form.username = 'admin'

关键区别:重新赋值问题

场景:从后台请求数据

reactive 的错误用法:

javascript 复制代码
// 初始化
let list = reactive(['苹果', '香蕉'])

// 模拟请求数据
setTimeout(() => {
  const newData = ['西瓜', '葡萄', '芒果']
  
  // ❌ 错误!这样会丢失响应式!
  list = newData
  
  // 页面不会更新!因为 list 的"监听器"断了
}, 1000)

ref 的正确用法:

javascript 复制代码
// 初始化
const list = ref(['苹果', '香蕉'])

// 模拟请求数据  
setTimeout(() => {
  const newData = ['西瓜', '葡萄', '芒果']
  
  // ✅ 正确!通过 .value 重新赋值
  list.value = newData
  
  // 页面正常更新!
}, 1000)

reactive 的正确用法(如果非要用):

javascript 复制代码
const state = reactive({
  list: ['苹果', '香蕉']
})

setTimeout(() => {
  const newData = ['西瓜', '葡萄', '芒果']
  
  // ✅ 正确!只改属性,不改对象本身
  state.list = newData
}, 1000)

📝 实战选择指南

情况1:基础数据 → 必须用 ref

javascript 复制代码
// ✅ 用 ref
const count = ref(0)
const name = ref('')
const isVisible = ref(true)

// ❌ reactive 会报错!
// const count = reactive(0) // 报错!

情况2:需要重新赋值 → 必须用 ref

javascript 复制代码
// 从API获取数据
const data = ref(null)
const fetchData = async () => {
  const result = await api.getData()
  data.value = result // ✅ 可以重新赋值
}

// 切换页面数据
const currentPageData = ref([])
const changePage = (page) => {
  currentPageData.value = getDataByPage(page) // ✅ 可以重新赋值
}

情况3:固定对象,只改属性 → 可以用 reactive

javascript 复制代码
// 表单数据 - 通常不会整个替换
const form = reactive({
  username: '',
  password: '',
  remember: false
})

// 用户信息 - 通常不会整个替换
const userInfo = reactive({
  name: '张三',
  age: 25,
  avatar: ''
})

情况4:不确定用哪个 → 无脑用 ref

javascript 复制代码
// 安全第一!
const something = ref(初始值)

🎯 黄金法则

  1. 处理数字、字符串、布尔值? → 用 ref
  2. 需要 xxx = 新数据 这样赋值? → 用 ref
  3. 只是一个固定对象,只改里面的属性? → 可以考虑 reactive
  4. 不确定? → 直接用 ref

记住:ref 永远不会错,reactive 有时候会坑你!

官方文档及尤雨溪提到过 ,ref 一把梭,不建议用 reactive。我说的话不可信,尤雨溪的话百分百可信,用,用,用ref一把梭。不服,不服你不用打我,去打他🤣

相关推荐
0思必得02 小时前
[Web自动化] Selenium处理动态网页
前端·爬虫·python·selenium·自动化
东东5162 小时前
智能社区管理系统的设计与实现ssm+vue
前端·javascript·vue.js·毕业设计·毕设
catino2 小时前
图片、文件的预览
前端·javascript
layman05284 小时前
webpack5 css-loader:从基础到原理
前端·css·webpack
半桔4 小时前
【前端小站】CSS 样式美学:从基础语法到界面精筑的实战宝典
前端·css·html
AI老李4 小时前
PostCSS完全指南:功能/配置/插件/SourceMap/AST/插件开发/自定义语法
前端·javascript·postcss
_OP_CHEN4 小时前
【前端开发之CSS】(一)初识 CSS:网页化妆术的终极指南,新手也能轻松拿捏页面美化!
前端·css·html·网页开发·样式表·界面美化
啊哈一半醒4 小时前
CSS 主流布局
前端·css·css布局·标准流 浮动 定位·flex grid 响应式布局
PHP武器库4 小时前
ULUI:不止于按钮和菜单,一个专注于“业务组件”的纯 CSS 框架
前端·css
电商API_180079052474 小时前
第三方淘宝商品详情 API 全维度调用指南:从技术对接到生产落地
java·大数据·前端·数据库·人工智能·网络爬虫