1. 数据通信

  • 作用:实现祖与后代组件间通信
  • 套路:父组件有一个 provide 选项来提供数据,后代组件有一个 inject 选项来开始使用这些数据

12. provide&& inject与数据判断 - 图1
祖组件:

  1. setup(){
  2. ......
  3. let car = reactive({name:'奔驰',price:'40万'})
  4. provide('car',car) // 给自己的后代组件传递数据
  5. ......
  6. }

后代组件

  1. setup(props,context){
  2. ......
  3. const car = inject('car') // 拿到祖先的数据
  4. return {car}
  5. ......
  6. }

2. 数据判断

isRef: 检查一个值是否为一个ref对象
isReactive:检查一个对象是都由reactive创建的响应式代理
isReadonly:检查一个对象是否由readonly创建的只读代理
isProxy:检查一个对象是否由reactive或者readonly方法创建的代理。

  1. <script>
  2. import MyChild from './MyChild.vue'
  3. import { reactive, toRefs, provide,isReactive, readonly , isReadonly, ref, isRef, isProxy} from 'vue'
  4. export default {
  5. components: {
  6. MyChild,
  7. },
  8. setup() {
  9. let person = reactive({
  10. name: 'IRIC',
  11. age: 12,
  12. sex: '女',
  13. job: {
  14. salery: 20,
  15. },
  16. address: '',
  17. })
  18. provide('person',person)
  19. const p = readonly(person)
  20. console.log(isReactive(person)) //true
  21. console.log(isReadonly(p)) //treu
  22. const count = ref(10);
  23. console.log(isRef(count))//treu
  24. console.log(isProxy(p))//treu
  25. return { ...toRefs(person), count }
  26. },
  27. }
  28. </script>