【发布时间】:2020-07-23 22:09:38
【问题描述】:
我有一个未排序的待办事项列表。一个计算值被添加到存储返回排序的待办事项。 React 组件使用sortedTodos 来显示列表。每当待办事项列表发生变化时,组件都不会重新渲染,如果我直接使用todos,它就可以工作。
export class TodoStore {
@observable todos: Todo[] = [
{ description: "testing", createdAt: new Date(), isCompleted: false },
];
@computed get sortedTodos(): Todo[] {
const sortedTodos = this.todos.sort(
(a, b) => a.createdAt.getTime() - b.createdAt.getTime()
);
return sortedTodos;
}
@action addTodo = (description: string) => {
this.todos.push({
description,
createdAt: new Date(),
isCompleted: false,
});
};
}
【问题讨论】:
-
我不熟悉 mobx,但我知道 react 会对 state/props 进行浅层引用相等性检查以确定组件是否应该重新渲染。数组是就地排序的,所以数组引用不会改变。如果
sortedTodos返回一个 new 数组,它可能会起作用。 -
你的 mobx 代码是正确的。能否在codeandbox上发布组件代码或进行复制?
标签: reactjs mobx mobx-react