RouteWrapper.jsx 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import React, {useMemo, useState} from 'react';
  2. import Popup from "@components/Popup";
  3. import { useNavigate } from 'react-router-dom';
  4. import {ROUTE_TYPE_FULL, ROUTE_TYPE_IN, ROUTE_TYPE_POP} from "@constants/routes";
  5. const i18n=global.i18n;
  6. const RouteWrapper = (props) => {
  7. const { Comp, route} = props;
  8. const navigate = useNavigate()
  9. /** useMemo 缓存query,避免每次生成生的query */
  10. const renderIn=()=>{
  11. let isexit=false;
  12. if (Comp!=null)isexit=true;
  13. return (
  14. <>
  15. {
  16. isexit?<Comp />:<></>
  17. }
  18. </>
  19. );
  20. }
  21. const handleClose = () => {
  22. navigate(-1);
  23. }
  24. const renderPop=()=>{
  25. let comp=(<></>);
  26. if (Comp!=null)comp=Comp;
  27. return(
  28. <Popup open={true} onClose={handleClose}>
  29. <div className="pop_content">
  30. {comp}
  31. </div>
  32. </Popup>
  33. )
  34. }
  35. const renderComp=()=>{
  36. let comp=(<></>);
  37. if (route.type===ROUTE_TYPE_FULL||route.type===ROUTE_TYPE_IN){
  38. comp=renderIn();
  39. }
  40. else if (route.type===ROUTE_TYPE_POP){
  41. comp=renderPop();
  42. }
  43. return comp;
  44. }
  45. return (
  46. renderComp()
  47. );
  48. };
  49. export default RouteWrapper;