首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >‘mobx-react lite’的观察者不工作

‘mobx-react lite’的观察者不工作
EN

Stack Overflow用户
提问于 2021-02-04 15:59:05
回答 1查看 1.8K关注 0票数 0

我刚开始练习反应莫克斯,现在我有问题了。观察者不工作了。它似乎没有观察商店。这应该从api加载一些活动列表,并在加载过程中显示图标(加载)。在加载数据之后,它应该将活动显示在框中。它从api中正确加载,我可以在网络检查选项卡中看到。问题就在观察者身上。这是我的activityStore:

代码语言:javascript
复制
import { action, observable } from "mobx";
import { createContext } from "react";
import agent from "../api/agent";
import { IActivity } from "../models/activity";

class ActivityStore {
  @observable activities: IActivity[] = [];
  @observable loadingInitial = false;

  @action loadActivities = () => {
    this.loadingInitial = true;
    agent.Activities.list()
      .then((activities) => {
        activities.forEach((activity) => {
          activity.date = activity.date.split(".")[0];
          this.activities.push(activity);
        });
      })
      .finally(() => {
        this.loadingInitial = false;
      });
  };
}

export default createContext(new ActivityStore());

我像这样使用App.tsx:

代码语言:javascript
复制
import { observer } from "mobx-react-lite";
import ActivityStore from "../stores/activityStore";
import some component from semantic ui react and other codes;

const App = () => {
  const activityStore = useContext(ActivityStore);

  useEffect(() => {
    activityStore.loadActivities();
  }, [activityStore]);

  if (activityStore.loadingInitial)
    return <LoadingComponent content="loading..." inverted={true} />;
  return (
    <Fragment>
      <NavBar createActivity={handleOpenCreateForm} />
      <Container style={{ marginTop: "7em" }}>
        <ActivityDashboard
          activities={activityStore.activities}
        />
      </Container>
    </Fragment>
  );
};

export default observer(App);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-04 17:08:20

我终于找到问题了。在新版本的mobx-react中,您需要在“构造函数”中调用“makeObservable”,如下所示:

代码语言:javascript
复制
class ActivityStore {
  @observable activities: IActivity[] = [];
  @observable loadingInitial = false;

constructor() {
    makeObservable(this);
  }

  @action loadActivities = () => {
    this.loadingInitial = true;
    agent.Activities.list()
      .then((activities) => {
        activities.forEach((activity) => {
          activity.date = activity.date.split(".")[0];
          this.activities.push(activity);
        });
      })
      .finally(() => {
        this.loadingInitial = false;
      });
  };
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66049212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档