Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在react/redux中记忆http请求页码_Javascript_Reactjs_React Redux - Fatal编程技术网

Javascript 如何在react/redux中记忆http请求页码

Javascript 如何在react/redux中记忆http请求页码,javascript,reactjs,react-redux,Javascript,Reactjs,React Redux,当我第二次调用request(如果已经调用)时,如何获取MagazineListDetail函数A段记忆 此参数不存在,我不想发送请求 export const fetchMagazineListDetail = (id, paginate) => { return dispatch => { dispatch(fetchMagazineListDetailBegin()); fetch(`http://localhost:3003/mag

当我第二次调用request(如果已经调用)时,如何获取MagazineListDetail函数A段记忆 此参数不存在,我不想发送请求

export const fetchMagazineListDetail = (id, paginate) => {
     return dispatch => {
        dispatch(fetchMagazineListDetailBegin());
         fetch(`http://localhost:3003/magazine/${paginate}`)
        .then(res => res.json())
        .then(res => {
            if(res.error) {
                throw(res.error);
            }
            dispatch(fetchMagazineListDetailSuccess(res));
            return res;
        })
        .catch(error => {
            dispatch(fetchMagazineListDetailError(error));
        })
    }
}

Thanks in advance

您可以对操作进行分组,而不是在已调度操作时进行调度。根据渲染期间、应用程序活动期间或本地存储中可以保留结果的缓存:

const{Provider,useDispatch,useSelector}=ReactRedux;
const{createStore,applyMiddleware,compose}=Redux;
const{createSelector}=重新选择;
const{useEffect,useMemo,useState}=React;
const{product}=immer;
//群承诺返回函数
常量createGroup=(缓存)=>(
fn,
getKey=(…x)=>JSON.stringify(x)
)=>(…参数)=>{
const key=getKey(args);
让result=cache.get(key);
如果(结果){
返回结果;
}
//无缓存
结果=Promise.resolve(fn.apply(null,args))。然后(
(r) =>{
cache.resolved(key);//告诉缓存承诺完成
返回r;
},
(e) =>{
cache.resolve(key);//告诉缓存承诺完成
退回承诺。拒绝(e);
}
);
cache.set(键、结果);
返回结果;
};
//thunk动作创建者不是(…args)=>结果,而是
//(…args)=>(调度,getState)=>结果
//下面是我们如何将thunk动作分组的
const createGroupedThunkAction=(thunkAction,缓存)=>{
const group=createGroup(
隐藏物
)((args、dispatch、getState)=>
thunkAction.apply(null,args)(dispatch,getState)
);
return(…args)=>(dispatch,getState)=>{
返回组(args、dispatch、getState);
};
};
//永久内存缓存存储创建者
常量createPermanentMemoryCache=(缓存=新映射())=>{
返回{
get:(key)=>cache.get(key),
set:(键,值)=>cache.set(键,值),
已解决:(x)=>x,
};
};
const NOT_REQUESTED={REQUESTED:false};
const initialState={data:{};
//动作类型
const BEGIN='BEGIN';
const SUCCESS=‘SUCCESS’;
//动作创造者
const fetchMagazineListDetail=createGroupedThunkAction(
(id)=>{
返回(发送)=>{
//还愿
返回Promise.resolve()。然后(()=>{
分派({type:BEGIN,payload:{id}});
设置超时(()=>
分派({type:SUCCESS,payload:{id}})
);
});
};
},
createPermanentMemoryCache()
);
const reducer=(状态,{type,payload})=>{
如果(类型===开始){
返回产品(状态,(草稿)=>{
const{id}=有效载荷;
draft.data[id]={…state.data[id]};
draft.data[id]。加载=true;
draft.data[id].requested=true;
});
}
如果(类型===成功){
const{id}=有效载荷;
返回产品(状态,(草稿)=>{
draft.data[id]。加载=false;
draft.data[id].requested=true;
draft.data[id].result=payload;
});
}
返回状态;
};
//选择器
const selectData=(state)=>state.data;
const crateSelectDataById=(id)=>
createSelector([selectData],(data)=>
数据[id]?数据[id]:未请求
);
//使用redux开发工具创建存储
康斯特康塞恩汉斯酒店=
窗口。uuu REDUX_vtools_uextension_uuucompose_uu124; COMPOSE;
const store=createStore(
减速器,
初始状态,
复合致癌物(
applyMiddleware(
//砰
({dispatch,getState})=>(下一步)=>(操作)=>{
如果(动作类型===‘功能’){
返回操作(分派、获取状态);
}
返回下一步(操作);
}
)
)
);
const Data=React.memo(函数数据({id}){
const dispatch=usedpatch();
const selectdatabyd=useMoom(
()=>DataById(id),
[id]
);
常量结果=使用选择器(selectDataById);
useffect(()=>{
如果(!result.request){
调度(fetchMagazineListDetail(id));
}
},[dispatch,id,result.requested];
返回{JSON.stringify(结果,未定义,2)};
});
常量应用=()=>{
const[id,setId]=useState(1);
返回(
setId(e.target.value)}
>
1.
2.
);
};
ReactDOM.render(
,
document.getElementById('root'))
);