同步 action 和异步 action 的最大区别是,同步 action 是立即返回一个对象,而异步 action 是返回一个函数或使用了 middleware 处理后的结果。
同步 action:通过派发一个简单的对象来描述一个动作。例如,返回一个包含 type 和 payload 的对象,表示对应的动作。
const increaseCounter = () => {
return {
type: 'INCREASE_COUNTER',
payload: 1
};
};
异步 action:通过返回一个函数或使用了 middleware 处理后的结果来描述一个异步操作。这个函数可以执行一些异步的操作,如网络请求,然后在适当的时机派发真正的同步 action。
const fetchUser = () => {
return (dispatch) => {
dispatch({ type: 'FETCH_USER_REQUEST' });
// 执行异步操作
fetch('https://api.example.com/user')
.then(response => response.json())
.then(data => {
dispatch({ type: 'FETCH_USER_SUCCESS', payload: data });
})
.catch(error => {
dispatch({ type: 'FETCH_USER_FAILURE', error: error.message });
});
};
};