reactjs - 显示来自同一个 reducer 的 2 个不同状态,而状态不会重写
问题描述
我正在构建一个大型应用程序,它从同一个减速器中获取不同的音乐音频和视频,我想从减速器中获取最新的 5 个音乐音频和视频,但它们都在同一个减速器中,我如何在没有的情况下获取这两个数据当我使用这些动作时,他们会互相重写吗?
解决方案
我没有清楚地了解您的问题,我认为最好发布您的代码。
但是,如果我猜对了,我认为您使用的是同一个对象来存储它们。你的代码应该是这样的。
在 reducer.js
const INITIAL_STATE = {
musicList: [],
videoList: []
};
export function reducerX(state = INITIAL_STATE, action) {
switch (action.type) {
case 'FETCHING_MUSIC_SUCCESS':
return {
...state, musicList: action.payload, loading: false
};
case 'FETCHING_MUSIC_LOADING':
return { ...state, loading: true };
case 'FETCHING_MUSIC_FAILED':
return {
...state,
error: 'failed to fetch music',
loading: false
};
case 'FETCHING_VIDEO_SUCCESS':
return {
...state, videoList: action.payload, loading: false
};
case 'FETCHING_VIDEO_LOADING':
return { ...state, loading: true };
case 'FETCHING_VIDEO_FAILED':
return {
...state,
error: 'failed to fetch video',
loading: false
};
}
}
在 actionX.js
export function fetchMusic() {
return dispatch => {
dispatch({
type: 'FETCHING_MUSIC_LOADING'
});
return API.get('/app/rest/music')
.then(({ data: music }) =>
dispatch({
type: 'FETCHING_MUSIC_SUCCESS',
payload: music
})
)
.catch(error => dispatch({ type: 'FETCHING_MUSIC_FAILED', payload: error }));
};
}
export function fetchVideo() {
return dispatch => {
dispatch({
type: 'FETCHING_VIDEO_LOADING'
});
return API.get('/app/rest/video')
.then(({ data: video }) =>
dispatch({
type: 'FETCHING_VIDEO_SUCCESS',
payload: video
})
)
.catch(error => dispatch({ type: 'FETCHING_VIDEO_FAILED', payload: error }));
};
}
推荐阅读
- c# - 有什么方法可以缓存 Azure Cosmos DB 的 DocumentClient 以获得更好的性能?
- javascript - 当我将其放入 onclick 时功能有效,但当我尝试在页面加载 (JavaScript) 中使用时无效
- java - 在firebase数据库中获取字符串值的正确方法是什么
- amazon-web-services - Databricks auto_termination 设置为 60 分钟,我的工作失败了
- javascript - 如何从样式化组件(React)访问 CSS 值?
- sql - 根据多个可能数组中的存在更新表值 (SQL)
- spring-integration - Spring Integration 5.07 使用 Java DSL 桥接两个 JMS 队列
- python - 在python中查找列表之间的日期时间差异
- swift - 逗号分隔的带有 2 位小数的数字 - swift
- java - JPQL 或未按预期工作