reactjs - 如何在 Redux reducer 中保持之前的状态并为之前的状态添加新状态?
问题描述
下面是我的减速机之一。在函数applySetRandomImages
中,我想访问以前的状态randomImages
以添加具有以前状态的新randomImages
状态。
我怎样才能做到这一点?Redux 中的 reducer 函数是否为此提供了一些回调函数?还是我应该自己实施?
// ACTIONS
const SET_RANDOM_IMAGES = "SET_RANDOM_IMAGES";
// ACTION CREATORS
function setRandomImages(randomImages) {
return {
type: SET_RANDOM_IMAGES,
randomImages
};
}
// API ACTIONS
function getRandomImages(page) {
return (dispatch, getState) => {
fetch(`/boutiques/random-images/?page=${page}`)
.then(response => response.json())
.then(json => dispatch(setRandomImages(json.results)))
.catch(err => console.log(err));
};
}
// INITIAL STATE
const initialState = {};
// REDUCER
function reducer(state = initialState, action) {
switch (action.type) {
case SET_RANDOM_IMAGES:
return applySetRandomImages(state, action);
default:
return state;
}
}
// REDUCER FUNCTIONS
function applySetRandomImages(state, action) {
const { randomImages } = action;
return {
...state,
randomImages <--- I need to merge the randomImages with a new state of randomImages
};
}
// EXPORTS
const actionCreators = {
getRandomImages,
};
export { actionCreators };
// DEFAULT REDUCER EXPORTS
export default reducer;
解决方案
您可以randomImages
通过将旧状态和新状态分散到新数组中来合并:
function applySetRandomImages(state, action) {
const { randomImages } = action;
return {
...state,
randomImages: [...state.randomImages, ...randomImages],
};
}
推荐阅读
- java - Flyway 没有正确清理数据库,执行了两次迁移文件
- mysql - 将 MySQL Query 转换为 Laravel 的 Eloquent
- centos6 - Freeswitch(呼叫中心):moh-sound 不播放
- reactjs - 使用 api 调用在 useEffect 中延迟状态更新
- icecast - 冰播端口 80
- javascript - 在线托管功能
- python - 具有多索引和部分总和的 Pandas Groupby 或数据透视表
- javascript - 详细堆栈错误:ENOENT:没有这样的文件或目录,打开
- annotations - 寻找 annotatorjs.org 的替代品
- objectbox - 在 ObjectBox 中,在 String 属性下搜索完整单词的简单方法是什么?