gyron.cc/docs/compon…
Gyron.js 的组件更新也可以叫做任务调度,在多个依赖数据更新时,每次的更新任务会被推送到一个 Scheduler List 中,然后再通过 Micro Task 依次执行更新,在压入到 List 中之前会检查是否有相同的更新任务,如果有,那么将会把上一次的更新任务剔除,因为下一帧的更新任务的数据是最新的,不需要重复更新。
当组件依赖的数据发生变更时,会将当前任务推送到 Scheduler List 中,然后在下一个 Micro Task 中对这个队列进行更新。换句话说就是同时修改一份变量,组件只会更新一次,如果同步修改多份数据,那么在下一个 Micro Task 中会以入栈顺序依次更新。
import { useValue } from "gyron";
const App = () => {
const v1 = useValue(0);
const v2 = useValue(0);
setTimeout(() => {
v1.value = 1;
v2.value = 1;
});
onAfterUpdate(() => {
console.log("updated");
});
return (
<div>
{v1.value} / {v2.value}
</div>
);
};
在 setTimeout 中我们同时修改 v1 和 v2 的值,这个时候 App 组件只会更新一次,然后打印日志updated。