当前位置:   article > 正文

ArkTS - @Prop、@Link

ArkTS - @Prop、@Link

一、作用

@Prop 装饰器 和@Link装饰器都是父组件向子组件传递参数,子组件接收父组件参数的时候用的,变量前边需要加上@Prop或者@Link装饰器即可。(跟前端vue中父组件向子组件传递参数类似)

  1. // 子组件
  2. @Component
  3. struct SonCom {
  4. @Prop name: string
  5. build() {
  6. // ···
  7. }
  8. }
  9. // 子组件
  10. @Component
  11. struct SonCom {
  12. @Link name: string
  13. build() {
  14. // ···
  15. }
  16. }

二、区别

@Prop :单向数据同步,也就是只能父组件向子组件传递,子组件值改变了不会影响到父组件中的值(类似前端vue中的props)。

@Link:双向数据同步,既可以父组件向子组件传递值,子组件也可以向父组件传递值。(类似前端vue中的v-model,估计设计的时候参考了)

(1)演示@Prop:
子组件中的输入框值是由父组件传进去的,当点击父组件按钮,子组件输入框值发生改变;但是如果在子组件输入框中直接输入,子组件中的值虽然改变了,但是父组件userName不会发生变化。

  1. // 子组件
  2. @Component
  3. struct SonCom {
  4. @Prop name: string
  5. build() {
  6. Row() {
  7. TextInput({text: this.name, placeholder: "请输入"})
  8. .width(280).padding(10)
  9. .onChange(val => {
  10. this.name = val
  11. console.log(`当前输入框的值: ${val}`)
  12. })
  13. }
  14. }
  15. }
  16. // 父组件
  17. @Entry
  18. @Component
  19. struct FatherCom {
  20. @State userName: string = ""
  21. build() {
  22. Column({space: 10}) {
  23. Text("子组件:")
  24. Row() {
  25. SonCom({name: this.userName})
  26. }
  27. Divider()
  28. Text("父组件:")
  29. Row() {
  30. Button("改变子组件输入框的值").onClick(e => {
  31. this.userName = "派大星"
  32. })
  33. }
  34. Row() {
  35. Text(`在父组件中userName的值:${this.userName}`)
  36. .fontSize(16).fontWeight(FontWeight.Bold)
  37. }
  38. }.margin(20)
  39. }
  40. }

页面如下:

点击父组件按钮,此时子组件输入框值发生改变:

但是直接在子组件输入框中直接输入,父组件userName没发生变化:

(2)演示@Link:
只把子组件@Prop换成@Link了:

  1. // 子组件
  2. @Component
  3. struct SonCom {
  4. @Link name: string
  5. build() {
  6. Row() {
  7. TextInput({text: this.name, placeholder: "请输入"})
  8. .width(280).padding(10)
  9. .onChange(val => {
  10. this.name = val
  11. console.log(`当前输入框的值: ${val}`)
  12. })
  13. }
  14. }
  15. }

在子组件输入框中输入值,父组件的userName也会跟着改变:

注:@Link装饰的变量,类型也可以时数组、对象复杂的数据类型,对数组的新增、替换、删除元素都可以监听到,当然对象的赋值啥的也能监听到,具体可查看文档。

@Link装饰器

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/288923
推荐阅读
相关标签
  

闽ICP备14008679号