export const getSomethingEpic = action$ =>
action$
.ofType(GET_SOMETHING)
.switchMap(action =>
ajax('url/api/something')
.map((json) => {
return getSomethingEndAct(json.response);
})
.takeUntil(action$.ofType('@@router/LOCATION_CHANGE'))
);
情况是这样的:
页面 A 有一个反应路由器链接到页面 B,在页面 B 上 componentDidMount 我调度 getSomething 动作。Ajax 可以完美取消。但是,如果页面 B 加载完成,ajax 完成,我们从页面 B 路由到页面 C,然后使用浏览器返回按钮再次路由到页面 B,action getSomething 将再次在 componentDidMount 中调度,但这次 ajax 被取消.
我不明白为什么要取消 ajax,因为位置更改是在 getSomething 操作之前。或者当路由改变时我应该怎么做才能取消ajax?
我尝试构建一个示例,但我无法让 react-router-redux 同步浏览器历史记录。这里是http://jsbin.com/dewixurece/edit?js,console,output 如果使用 hashHistory 它将工作,但会有两个位置更改操作,应该是一个,我不知道为什么。
这是一个很棒的库,我真的很喜欢 RX 编程理念,但仍在学习,希望我们能有更多的例子。谢谢,如果有人可以帮忙。