前言
在Vue
当中,父组件想要向子组件传值,是通过在父组件标签上通过自定义属性实现的,而在子组件中是通过props
进行接收
在Vue2.0
里面,在子组件中的选项式API
配置项选项中props
进行接收就可以了的,在子组件中的模板中可以直接使用
但在Vue3
里面与Vue2.0
存在一些差异,这个主要是针对组合式API
的setup
函数
01
setup函数接收第一个参数props
setup
函数的第一个参数是接收父组件传递过来的props
,这个setup函数的props是响应式的,并且会在传入的新的props时同步更新
如下是父组件的数据
<script setup>
import Comp from "./Comp.vue"
import { ref } from 'vue'
const name = "https://coder.itclan.cn"
</script>
<template>
<Comp :name="name" />
</template>
如下是子组件Comp.vue
export default {
props: {
name
},
setup(props) {
console.log(props.name);
}
}
在模板中渲染
<template>
<h1>{
{name}}</h1>
</template>
那如何去修改模板中的数据呢,这个与Vue2.0
绑定事件一样,在模板中,通过v-on
或@
进行绑定,函数则通过function
定义在setup
里面,同时返回出去
<template>
<h1>{
{name}}</h1>
<button @click="handleChange">修改</button>
</template>
对应的js
<script>
import { ref } from 'vue'
export default {
props: { // 必须要声明接收才可以,否则页面数据不会显示
name
},
setup(props){
console.log(props.name);
let name = ref(props.name); // 相当于是对props传递过来的数据做了一份拷贝
function handleChange() {
console.log(name.value);
name.value = "川川"
}
return {
name,
handleChange
}
}
}
</script>
注意事项
[1]. 想要修改父组件传递过来的props
值,接收到的props.name
必须要使用ref
进行响应式处理,否则的话,修改name