调用 add 添加数据 -> 清空渲染器 -> 设置新的渲染器数据 -> 重新渲染
非 add 调用不清空渲染器
class Module {
renderer = null; // 渲染器实例
// 手动添加数据并渲染
add(data) {
this.renderer.clear(); // 清空渲染器(如果是手动添加数据则需要先清空渲染器)
this.renderer.setData(data); // 更新渲染器数据
this.renderer.render(); // 重新渲染新数据
}
}
class ModuleState {
needClear = false; // 标记需要清空渲染器
@observable data = null; // 新的渲染数据
// 手动添加数据
add(data) {
this.needClear = true;
this.data = data;
}
}
// ModuleView 是异步的,ModuleState 中也拿不到 ModuleView
class ModuleView {
state = null; // ModuleState
renderer = null; // 渲染器实例
constructor() {
// 当 ModuleState.data 发生变化时,自动渲染数据
autorun(() => this.render(this.state.data))
}
render(data) {
// 如果是手动添加数据则需要清空渲染器
if (this.state.needClear) {
this.renderer.clear();
this.state.needClear = false;
}
this.renderer.setData(data); // 更新渲染数据
this.renderer.render(); // 重新渲染新的数据
}
}
在状态方式中,需要额外的一个标记来表示是否需要清空渲染器。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.