我是信号新手,在理解基础知识方面遇到一些困难。
public currentPage: WritableSignal<number> = signal(1);
public totalPages: Signal<number> = computed(() => {
return Math.max(1, Math.ceil((this.totalCount() ?? 0) / this.pageSize()));
});
检查 currentPages 是否高于totalPages 是有意义的,在这种情况下设置为 1。
effect(() => {
if (this.currentPage() > this.totalPages()) {
this.currectPage.set(1);
}
});
但是不建议使用 .set 实际上,为此我必须添加 {allowSignalWrites: true },并防止循环 untracked() 但这看起来很奇怪。
对此建议采取什么方法?我错过了什么吗?
最好将这段代码从
effect
移出,放到你设置当前页面的地方。这将解决您的问题。
setCurrentPage() {
if (this.currentPage() > this.totalPages()) {
this.currentPage.set(1);
} else {
this.currentPage.update((prev) => prev + 1);
}
}