vue3中的provide,inject和ref的用法

374 阅读1分钟

父组件向子组件传值 provide inject

父组件
import { provide, ref, readonly } from 'vue'
setup() {
    const name = ref('zhangsan')
    // readonly避免子组件改变父组件中的值 保证单向数据流
    provide('name', readonly(name));
    provide('changeName', (value) => {
    	name.value = value
    })
},
template: `
	<div>child /></div>
`

子组件
import { inject } from 'vue'
setup() {
	const name = inject('name')
    const changeName = inject('changeName')
    const handleClick = () => {
    	changeName('lisi')
    }
   return { name, handleClick }
},
template: `<div @click="handleClick">{{name}}</div>`

vue3中如何获取div对应的dom节点 ref

1.固定写法 声明一个常量 const hello = ref(null) return { hello }。 2.模版中定义一个ref="hello"的div 名字对应起来。 3.在onMounted中获取dom节点

// 该ref是生成响应式的引用 两者结合才可获取真实的dom节点元素
import { ref, onMounted } from 'vue'
setup() {
	const hello = ref(null)
    onMounted(() => {
    
    })
    const changeName = inject('changeName')
    const handleClick = () => {
    	changeName('lisi')
    }
   return { hello }
},
// 该ref是要获取dom节点的引用
template: `<div ref="hello">hello world</div>`