状态管理
state 驱动试图更新的数据(被装饰器标记的变量)被标注的数据更新时会执行build中的函数
view 基于UI描述渲染得到的用户界面
视图通过互动事件可以修改状态,状态触发后渲染视图
@State
标记的变量必须初始化,不能是空值
不支持复杂数据类型 any 嵌套类型,数组存储的对象中的属性发生变化 都不会触发视图更新
隔代不会触发试图刷新
@Prop和@Link
因为@State装饰器,父组件引用子组件(子组件再引用子组件)的时候当父组件发生数据变更的时候需要通知子组件,实现不了同步更新 所以需要@Prop和@Link
这俩修饰的变量都不能进行初始化,而且不能被@Entry修饰
@Prop
单向同步 父组件同步数据到子组件 但是子组件数据发生改变之后不能同步给父组件 拷贝给子组件
只能传递string number boolean enum
不能是数组 any 对象,可以是对象的属性
@Link
双向同步,父子组件修改数据之后可以互相传递
传递的是数据的引用
要求父子类型一致 可以传递对象
@Providc和@Consume
可以实现隔代传递数据的双向绑定
注意
儿子需要改变传递的数据用link 只是渲染就用prop
使用@Link传递时因为传递的是数据的引用 所有不能直接用this.变量
需要使用**$变量**
taskList({totalTask:$totalTask,finishTask:$finishTask})
@ObjectLink和@Observed
解决嵌套对象和数组元素为对象时 被嵌套的对象属性发生改变的时候不能触发页面刷新
@Observed需要加在嵌套类和被嵌套类的上面
@ObjectLink用在引用被嵌套类时 不能加@Entry 不能初始化
对象数组中的对象必须是new出来的?
方法传递
子组件调用父组件的方法
方法在另一个组件内部,不能抽过来的时候,可以通过将方法作为参数进行传递
changeTask:()=>void
方法作为参数传递的时候,方法中的this可能已经发生改变了
it({ item:item ,changeTask:this.changeTask.bind(this)})
在方法传递的时候加上.bind传入this 此时这个this就是传之前的this
数据同步
父组件更新数据之后传递给子组件以及子组件的子组件
注意
父组件的@State变量不能传给子组件一样的@State组件,但是此时子组件不知道父组件数据发生更新。需要使用@Prop和@Link装饰器