【发布时间】:2016-10-10 18:38:18
【问题描述】:
我有一个使用 redux thunk 的操作,看起来像这样:
export function fetchData(query) {
return dispatch => {
return fetch(`http://myapi?query=${query}` ,{mode: 'cors'})
.then(response => response.json())
.then(json => { dispatch(someOtherAction(json)) })
}
}
}
然后我的someOtherAction 实际更新状态:
export function someOtherAction(data) {
return {
action: types.SOME_ACTION,
data
}
}
但我希望fetchData 动作创建者可以重复使用,以便我的应用程序的不同部分可以从myapi 获取数据,然后基于此拥有不同的状态部分。
我想知道重用此操作的最佳方式是什么?是否可以将第二个参数传递给我的 fetchData 动作创建者,该参数规定在成功获取时调用哪个动作:
export function fetchData(query, nextAction) {
return dispatch => {
return fetch(`http://myapi?query=${query}` ,{mode: 'cors'})
.then(response => response.json())
.then(json => { dispatch(nextAction(json)) })
}
}
}
或者是否有一种可接受的方式来做这种事情?
【问题讨论】:
-
看起来您无法将其他参数传递给操作。
-
我有一些非常相似的东西一起被黑了。我还将
nextErrorAction作为fetchData的附加参数。此外,当状态码为 2xx 和dispatch(nextErrorAction(data))和reject时,我还返回一个承诺和dispatch(nextAction(data))以及resolve和 4xx/5xx。它最终工作得很好,只需要几行代码。 -
啊好吧,这很有趣。找不到任何有关您是否应该传递额外参数的文档。认为我可能根本不需要采取行动? github.com/gaearon/redux-thunk 定义了一个
fetchSecretSauce方法,该方法在动作创建者之外进行获取。
标签: redux