【发布时间】:2018-01-10 14:28:49
【问题描述】:
在对服务器进行 AJAX 处理后,我试图从 reducer 更改 redux 的状态,但由于某种原因,当我在 promise 响应中更改状态变量时,它仍然没有像我想要的那样更改状态。
我为 AXIOS 开发了自己的界面:
export function my_post(url, json_data, success_callback, error_callback) {
return axios({
method: 'post',
url: url,
data: btoa(JSON.stringify(json_data)) || {},
headers: {
'X-XSRFToken': getCookie('_xsrf')
}
}).then(response => {
if (success_callback)
success_callback(response)
}).catch(error => {
if (error_callback)
error_callback(error)
})
}
我在 reducer 中这样调用这个函数:
export default (state = initState, action) => {
switch(action.type) {
case actionTypes.AJAX:
my_post(
'/ajax/url',
{
content: 'some content'
},
(response) => {
state = {
...state,
ts: response['ts']
}
}
)
break
}
return state
}
也试过这个:
export default (state = initstate, action) => {
switch(action.type) {
case actionTypes.AJAX:
my_post(
'/ajax/url',
{
content: 'some content'
}
).then(
state = {
...state,
ts: response['ts']
}
)
break
}
return state
}
但是当我到达 return state 时,ts 参数不存在。
我在这里错过了什么?
【问题讨论】:
-
问题是您试图在减速器内部执行异步操作。该动作应该发生在一个动作中,然后在完成时调用reducer。请阅读这篇文章,了解为什么 Redux Stores 只支持同步数据流:stackoverflow.com/questions/34570758/…
标签: reactjs redux react-redux axios