computed
行为说明
- 计算属性在实例初始化前完成初始化,可通过
this.data使用properties/store/data/其他computed。 - 由于小程序
properties中对象属性默认值可能为null,在计算中使用对象属性时需判空。 - 依赖数据变化时,计算属性会自动更新。
- 计算函数内只有
this.data可用,且data只读(运行时检测)。 - 若遇到类型推断问题,可先显式标注计算函数返回类型。
示例
ts
import {
ChunkComponent,
CustomComponent,
DefineComponent,
DetailedType,
type ExtendComponentType,
RootComponent,
} from "annil";
import type { $TopNav } from "../../components/topNav/topNav";
import { User, userStore } from "../../moudule/userStore";
type $TopNavExtend = ExtendComponentType<
$TopNav,
{ events: { topNav_tap: null } }
>;
const rootComponent = RootComponent()({
isPage: true,
properties: {
Pnum: {
type: Number,
value: 1,
},
Puser: Object as DetailedType<User>,
},
data: {
Dstr: "miss",
},
store: {
age: () => userStore.age,
},
computed: {
Cage() {
return this.data.age + 1;
},
CPnum() {
return this.data.Pnum + 1;
},
CPobj() {
return this.data.Puser?.age || 0;
},
},
});
type Root = typeof rootComponent;
const topNav = CustomComponent<Root, $TopNavExtend>()({
data: {
topNav_title: "computed",
topNav_twTitle: " primary",
},
events: {
topNav_tap() {
wx.navigateBack();
},
},
});
const calcChunk = ChunkComponent<Root, "calc">()({
computed: {
calc_subCompNum(): number {
return this.data.Cage + this.data.CPnum + this.data.age + this.data.CPobj;
},
},
});
const computed = DefineComponent({
path: "/pages/computed/computed",
rootComponent,
subComponents: [calcChunk, topNav],
});
export type $Computed = typeof computed;参考
- 建议与 API 总览 配合阅读