React Flux实现调度链

nid*_*idu 11 javascript flux reactjs

我正在尝试使用React与Flux架构,并偶然发现了一个我无法处理的限制.问题如下:

  1. 有一家商店可以收听活动.事件有对象ID.我们需要在需要时获取对象并将其选中.
  2. 如果商店没有具有此ID的对象 - 则查询它.在回调中,我们将另一个事件分派给负责选择的商店.
  3. 如果商店有对象 - 我想发送选择事件,但我不能因为调度正在进行中.

到目前为止,我提出的最佳解决方案是将内部调度包装起来setTimeout(f, 0),但它看起来很吓人.

实际上问题非常普遍 - 如果每个新的调度基于先前的调度处理结果,我应该如何在没有调度嵌套的情况下组织调度链(不违反当前的Flux限制).

有没有人有解决这些问题的好办法?

var selectItem(item) {
    AppDispatcher.dispatch({
        actionType: AppConstants.ITEM_SELECT,
        item: item
    });
}

// Item must be requested and selected.
// If it's in store - select it.
// Otherwise fetch and then select it.
SomeStore.dispatchToken = AppDispatcher.register((action) => {
    switch(action.actionType) {
        case AppConstants.ITEM_REQUESTED:
            var item = SomeStore.getItem(action.itemId);
            if (item) {
                // Won't work because can't dispatch in the middle of dispatch
                selectItem(item);
            } else {
                // Will work
                $.getJSON(`some/${action.itemId}`, (item) => selectItem(item));
            }
    }
};
Run Code Online (Sandbox Code Playgroud)

z5h*_*z5h 2

您正在编写自己的调度程序吗? setTimeout(f, 0)这是一个很好的技巧。我在这里以最小的流量做同样的事情。那里没什么可怕的。Javascript 的并发模型非常简单。

更强大的通量调度程序实现应该可以为您处理这个问题。

  • 关于这个问题,可以从商店内创建新的操作,但听起来您试图在调度程序完成调度之前这样做。然而,看到其中的“已选择/选择”一词听起来好像 UI 状态正在渗透到您的应用程序状态中。也许值得重新思考或重新调整你的行动。如果没有更多背景,很难说。 (3认同)