2

我有一个非常简单的 Fluxible 商店:

export default class NoteStore extends BaseStore {
  static storeName = "NoteStore";

  static handlers = {
    [Actions.NEW_NOTES_FETCHED]: 'handleNewNotes'
  };

  constructor(dispatcher) {
    super(dispatcher);
    this.notes = [];
  }

  handleNewNotes(notes) {
    this.notes = [];
    var i;
    for (i = 0; i < notes.length; i++){
      this.notes.push(notes[i].content);
    }
    this.emitChange();
  }

  /* ... */

  dehydrate() {
    return { notes: this.notes };
  }

  rehydrate(state) {
    this.notes = state.notes;
  }

  // Shouldn't be necessary to override?
  shouldDehydrate() {
    return true;
  }
}

NEW_NOTES_FETCHED 由从我的后端 API 获取数据的操作调度,并且存储侦听该事件并从有效负载中提取数据。据我所知,这一切都在起作用,因为在客户端运行时一切都运行良好。

我遇到的问题是 NoteStore 在服务器调用app.dehydrate(). 我查看嵌入到页面中的 JSON,但在任何地方都看不到我的商店,尽管我确实看到了 RouteStore 的信息。

我使用 FluxibleContext 注册了我的商店,但我是否需要另外做一些事情才能将其添加到脱水链中?

应用程序引导代码(如果相关):

const app = new Fluxible({ component: Root });

const AppRouteStore = RouteStore.withStaticRoutes(routes);
app.registerStore(AppRouteStore);  // AppRouteStore appears in dehydrated JSON

app.registerStore(HtmlHeadStore); // Neither of these do, though HtmlHeadStore doesn't need to
app.registerStore(NoteStore);

export default app;
4

1 回答 1

2

好的,我知道出了什么问题。基本上,应该分派NEW_NOTES_FETCHED事件的操作没有返回承诺,因此处理来自后端服务器的响应的逻辑从未真正运行过,即使请求本身已经发出并且我看到它出现在后端的日志中.

我正要为此困惑了这么久,所以希望有人能从我的挣扎中学习!

于 2015-11-26T04:51:05.190 回答