@Link修饰的对象属性变化时UI不刷新
====================

#### 问题现象

嵌套对象或者对象数组的属性发生改变时，如何实现UI刷新？

#### 背景知识

ArkUI中[@Link装饰器](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-link#简单类型和类对象类型的link)是用于父子组件中的变量双向同步的。子组件通过@Link接收父组件传递的状态变量，当父组件/子组件任意一方发生改变时都会引起另一个同步变化。当装饰的是基本数据类型或者简单对象这类能直接被ArkUI框架观察到的就能触发页面实时渲染。对于复杂对象只能同步值的变化，无法触发UI渲染刷新。

#### 解决方案

@Link装饰器只监听对象本身的地址以及第一层属性的地址变化。当装饰的对象为复杂类型，如对象数组时，其属性的变化不会让UI刷新。可以通过浅拷贝覆盖原来的值达到刷新UI的效果，但会导致不必要的渲染，不建议使用。

对于复杂对象的监听可以使用[@Observed装饰器和@ObjectLink装饰器](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-observed-and-objectlink)、[@ObservedV2装饰器和@Trace装饰器](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-new-observedv2-and-trace)、[@Monitor装饰器](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-new-monitor)，能观察到对象内部的其他对象发生改变，以实现刷新UI的功能。