美文网首页鸿蒙
状态 - @Provide装饰器和@Consume装饰器:与后代

状态 - @Provide装饰器和@Consume装饰器:与后代

作者: wendy__xu | 来源:发表于2024-03-15 14:19 被阅读0次

    @Provide和@Consume,应用于与后代组件的双向数据同步,应用于状态数据在多个层级之间传递的场景。不同于上文提到的父子组件之间通过命名参数机制传递,@Provide和@Consume摆脱参数传递机制的束缚,实现跨层级传递。

    其中@Provide装饰的变量是在祖先节点中,可以理解为被“提供”给后代的状态变量。@Consume装饰的变量是在后代组件中,去“消费(绑定)”祖先节点提供的变量。

    概述

    @Provide/@Consume装饰的状态变量有以下特性:

    • @Provide装饰的状态变量自动对其所有后代组件可用,即该变量被“provide”给他的后代组件。由此可见,@Provide的方便之处在于,开发者不需要多次在组件之间传递变量。
    • 后代通过使用@Consume去获取@Provide提供的变量,建立在@Provide和@Consume之间的双向数据同步,与@State/@Link不同的是,前者可以在多层级的父子组件之间传递。
    • @Provide和@Consume可以通过相同的变量名或者相同的变量别名绑定,变量类型必须相同。
    // 通过相同的变量名绑定
    @Provide a: number = 0;
    @Consume a: number;
    
    // 通过相同的变量别名绑定
    @Provide('a') b: number = 0;
    @Consume('a') c: number;
    

    注意:@Provide和@Consume通过相同的变量名或者相同的变量别名绑定时,@Provide修饰的变量和@Consume修饰的变量是一对多的关系。不允许在同一个自定义组件内,包括其子组件中声明多个同名或者同别名的@Provide装饰的变量。

    装饰器说明

    @State的规则同样适用于@Provide,差异为@Provide还作为多层后代的同步源。详细见官方

    注意:
    @Provide变量装饰器

    • 被装饰变量的初始值 ,则必须指定

    @Consume变量装饰器

    • 被装饰变量的初始值 ,无,禁止本地初始化

    @Provide初始化规则图示


    image.png

    @Consume初始化规则图示

    image.png

    观察变化和行为表现

    相关文章

      网友评论

        本文标题:状态 - @Provide装饰器和@Consume装饰器:与后代

        本文链接:https://www.haomeiwen.com/subject/fregzdtx.html