Vue3 新手开发 ----- 记录问题

问题1: reactive声明响应式数据,数据赋值成功,视图不更新

<script setup>
import { reactive,ref } from 'vue'
 const obj = {
	name: '哈哈',
	sex: '男'
 }
 let formObj = reactive({})
 console.log(formObj)
 formObj = obj
 console.log(formObj)
</script>

上述示例中, form的值更新了,但是没有更新页面(可打印form,观察下更新前后的变化)

官方文档解释其原因:reactive()返回的是一个原始对象的 Proxy,它和原始对象是不相等的(上图红框所示)。只有代理对象是响应式的,更改原始对象不会触发更新,其响应式就会失效。(上图黄框所示)

解决方式:

1、reactive外层包裹

const obj = {
  name: '哈哈',
  sex: '男'
}
let formObj = reactive({
  form:{
  }
})
formObj.form = obj

2、使用ref声明(更推荐)

const obj = {
  name: '哈哈',
  sex: '男'
}
let form= ref({})
form.value= obj

问题2:父组件如何调用子组件方法和值

使用 <script setup> 的组件默认是关闭的,不会暴漏任何在<script setup>中声明的绑定。

因此父组件不能直接访问子组件的方法和值,需要子组件主动抛出。

子页面:声明要暴漏的值和方法

<script setup>
import { reactive, defineExpose } from "vue";
const formObj = reactive({
 name: '哈哈',
 sex: '男'
})

function sonFun(){
    console.log('我是子组件')
}
defineExpose({
  formObj ,
  sonFun
})

</script>

父组件:获取暴漏的值和方法

<template>
    <child ref='childRef'/>
</template>
<script setup>
import { ref } from "vue";

const childRef = ref(null)

function getFun () {
    let  obj = childRef.value.formObj // 获取子组件值
    let fun = childRef.value.sonFun() // 获取子组件方法
}


</script>

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值