【发布时间】:2019-11-27 18:28:47
【问题描述】:
我设置了一个商店,其中包含从我的 API 加载的游乐设施列表:
const loadRides = () => client.service('rides').find({
query: {
$sort: {
date: -1,
}
}
});
const createRides = () => {
const { subscribe, update } = writable([], async (set) => {
try {
const rides = await loadRides().then((result) => result.data);
set(rides);
} catch (e) {
console.error(e);
}
// Socket update binding?
});
subscribe((rides) => console.debug('rides', rides));
return {
subscribe,
refresh: () => loadRides().then((result) => update(() => result.data)),
};
};
export const rides = createRides();
然后我为过去和未来的游乐设施设置了两个派生商店:
export const pastRides = derived(
rides,
($rides) => $rides
.filter((ride) => ride.steps.every((step) => step.doneAt))
,
);
export const comingRides = derived(
rides,
($rides) => $rides
.filter((ride) => ride.steps.some((step) => !step.doneAt))
.sort((rideA, rideB) => {
const compare = new Date(rideA.date) - new Date(rideB.date);
console.log(rideA.date, rideB.date, compare);
return compare;
})
,
);
第二个上的sort方法没有任何作用。
所以我试着把这个方法放在filter 之前。它有效,但它也对$pastRides 进行排序。事实上,它正在对完整的$rides 数组进行排序,这很有意义。
但我不明白为什么filter 之后的sort 不起作用。
我错过了什么?
【问题讨论】:
-
如果没有看到最小的可重现示例就很难说,但它可能与
sort改变数组有关吗?您可以尝试$rides.slice()创建数组的浅表副本,然后再在派生中执行任何其他操作,看看是否有帮助。
标签: javascript svelte svelte-3 svelte-store