我想要创建一个可重用的redux表格模块,其中将存储和更新页码、显示的总页数等信息,我可以在所有页面之间共享该模块。
然而,我需要更新操作触发一个refreshdata动作,该动作将命中不同的终端点,具体取决于页面。
因此,也许可以像页面特定的监听'RefreshData'动作一样,然后触发另一个动作。怎么实现最好呢?我目前使用redux-thunk作为我的中间件,但一直在寻找redux-saga。
最佳实现方法是什么?
**澄清一下**
我在多个页面/项目上都有表格,我想最小化代码重复。我的想法是可能制作一个可放置的redux模块(操作+ reducer),然后仅单独指定REFRESH_DATA操作的处理程序,这样我就不需要在此文件中放置switches。我认为使用redux-saga我可以听取REFRESH_DATA操作,并根据当前页面进行切换?或者有更好的建议。
export const ITEMS_PER_PAGE_UPDATED = 'ITEMS_PER_PAGE_UPDATED'
export const CURRENT_PAGE_UPDATED = 'CURRENT_PAGE_UPDATED'
export const REFRESH_DATA = 'REFRESHDATA'
export const DATA_REFRESHED = 'REFRESHDATA'
export function currentPageUpdated(value) {
return function (dispatch) {
dispatch({
type: CURRENT_PAGE_UPDATED,
value
})
dispatch({type:REFRESH_DATA})
}
}
export function itemsPerPageUpdated(value) {
return function (dispatch) {
dispatch({
type: ITEMS_PER_PAGE_UPDATED,
value
})
dispatch({type:REFRESH_DATA})
}
}
function reducer(state={ pageNumber:1, pageSize:10, totalItems:0, totalPages:1, sortColumn:null, sortAscending:true }, action) {
switch(action.type) {
case ITEMS_PER_PAGE_UPDATED:
return Object.assign({}, state, {pageSize: action.value, pageNumber:1})
case CURRENT_PAGE_UPDATED:
return Object.assign({}, state, {pageNumber: action.value})
case DATA_REFRESHED:
return Object.assign({}, state, {totalPages: action.values.totalPages, totalItems:action.values.totalItems})
default:
return state
}
}
export default reducer