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>
相关推荐
假如让我当三天老蒯2 小时前
Options API(选项式 API) 和 Composition API(组合式 API)
前端·vue.js·面试
秃头网友小李3 天前
前端难点:keep-alive 缓存什么?RouterView 的 key 为什么要带 scopeId?
前端·vue.js
徐小夕3 天前
JitWord 3.0 正式发布,高精度Word异构解析+复杂组件兼容,打造web端协同Word编辑器
前端·vue.js·算法
奋斗吧程序媛4 天前
补充一个小知识点:有关@click.native
前端·vue.js
英勇无比的消炎药4 天前
一行命令背后:TinyRobot CLI 如何重构 AI 对话接入的效率范式
vue.js·aigc
jay神4 天前
基于 FastAPI + Vue 的宠物领养管理系统
前端·vue.js·python·毕业设计·fastapi·宠物
一杯奶茶¥4 天前
水果销售网站 CRM客户信息管理系统 超市管理系 酒店管理系统 健身房管理系统 在线音乐网站 校园招聘系统
java·vue.js·spring boot·mysql·spring·java项目
英勇无比的消炎药4 天前
一站式搞定品牌风格:TinyRobot 主题定制从入门到精通
vue.js
尽欢i4 天前
Vue3 customRef 封神教程:防抖、本地存储、自动埋点一套搞定,模板干干净净
前端·javascript·vue.js
因_崔斯汀4 天前
Vue 模板编译:HTML 是怎么变成 JS 的?
前端·vue.js