【发布时间】:2017-06-13 22:39:31
【问题描述】:
我正在尝试使用 redux thunk 进行异步操作,它正在按照我想要的方式更新我的商店。我在this.props 中有我的图表的数据,方法是:
const mapStateToProps = (state, ownProps) => {
const key = state.key ? state.key : {}
const data = state.data[key] ? state.data[key] : {}
return {
data,
key
}
}
export default connect(mapStateToProps)(LineChart)
data 是 store 中的一个对象,每次我进行 XHR 调用以获取另一条数据时,它都会进入 store。
这是异步和同步操作
export function addData (key, data, payload) {
return {
type: ADD_DATA,
key,
data,
payload
}
}
export function getData (key, payload) {
return function (dispatch, getState) {
services.getData(payload)
.then(response => {
dispatch(addData(key, response.data, payload))
})
.catch(error => {
console.error('axios error', error)
})
}
}
还有减速器:
const addData = (state, action) => {
const key = action.key
const data = action.data.results
const payload = action.payload
return {
...state,
payload,
key,
data: {
...state.data,
[key]: data
}
}
}
在the tutorial我一直跟着(code on github),这似乎足够了,当存储中已经存在一条数据时,比如data['some-key'] redux 不会再次请求数据.我不完全确定它是如何预防的,但在课程中,确实如此。但是,我肯定会再次为我商店中已经存在的密钥进行网络调用
有什么方法可以防止我的商店中已经存在的数据出现 XHR?
【问题讨论】:
-
我会在我的操作中检查数据是否存在(通过调用
getState并检查它是否存在;如果存在,则分派它,否则你会调用它。
标签: javascript reactjs asynchronous redux redux-thunk