vue3组合式api <script setup> props 父子组件的写法

父组件传入子组个的变量, 子组件是无法直接修改的, 只能通过 emit的方式, 让父组件修改, 之后子组件更新

js 复制代码
<template>
  <div class="parent">
    我是父组件
    <son :msg="msg" :obj="obj" @changemsgEmit="changemsgEmit" @changeobjnameEmit="changeobjnameEmit" @changeobjageEmit="changeobjageEmit"></son>
  </div>
</template>

<script setup>
  import {ref, reactive} from "vue";
  import son from "./son.vue"

  let msg = ref("this msg form parent.vue");

  let obj = reactive({
    name:"huang",
    age:39
  })

  const changeobjageEmit = (params)=>{
    obj.age = params;
  }

  const changeobjnameEmit = (params)=>{
    obj.name = params.newname;
  }

  const changemsgEmit = (params)=>{
    console.log(params);
    msg.value = params.join("");
  }

</script>

<style scoped>

</style>

父组件的写法没有变, 子组件的写法就有很大的变化了

vue 复制代码
<template>
  <div class="son">son
    {{msg}}
    <hr/>
    {{obj.name}}
    {{obj.age}}
  </div>
  <button @click="changemsg">changemsg</button>
  <button @click="changeobjname(3)" type="button">changeobjname</button>
  <button @click="changeobjage(42)" type="button">changeobjage</button>
</template>

<script setup>
//这里定义了一个 props来接收传来的属性
//使用时可以是 {{msg}}  也可以使用 {{props.msg}}
  let props = defineProps({
    msg:{
      type:String,
      default:""
    },
    obj:{
      type:Object,
      default:{}
    }
  })

  //这里定义了三个自定义事件
  const emit = defineEmits(["changeobjnameEmit","changeobjageEmit","changemsgEmit"]);


  //下面是通过事件调用了三个自定义的事件
  const changeobjname = ()=>{
    let objname = {newname:"hahaha"}
    emit("changeobjnameEmit",objname)
  }

  const changeobjage = (age)=>{
    emit("changeobjageEmit",age)
  }

  const changemsg = ()=>{
    emit("changemsgEmit",["aa","bb","cc"]);
  }


</script>
相关推荐
小迷糊的学习记录36 分钟前
Vuex 与 pinia
前端·javascript·vue.js
利刃大大1 小时前
【Vue】Element-Plus快速入门 && Form && Card && Table && Tree && Dialog && Menu
前端·javascript·vue.js·element-plus
小毛驴8502 小时前
Vue 路由示例
前端·javascript·vue.js
TT哇5 小时前
【实习 】银行经理端两个核心功能的开发与修复(银行经理绑定逻辑修复和线下领取扫码功能开发)
java·vue.js
星光不问赶路人6 小时前
vue3使用jsx语法详解
前端·vue.js
weixin79893765432...7 小时前
Vue 组件的更新过程(编译系统 + 响应式系统 + 虚拟 DOM & Diff)
vue.js
我是伪码农7 小时前
Vue 智慧商城项目
前端·javascript·vue.js
小书包酱8 小时前
在 VS Code中,vue2-vuex 使用终于有体验感增强的插件了。
vue.js·vuex
Zhencode9 小时前
Vue3 响应式依赖收集与更新之effect
前端·vue.js
天下代码客9 小时前
使用electronc框架调用dll动态链接库流程和避坑
前端·javascript·vue.js·electron·node.js