index.tsx 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. import React, { useEffect } from 'react';
  2. import { Button, Card, Space, Typography } from 'antd';
  3. import { useNavigate, useParams, useSearchParams } from 'react-router-dom';
  4. import { reportEvent } from '@/firebase';
  5. import { useSmartRouter } from '@/utils/routerUtils';
  6. const { Title, Paragraph } = Typography;
  7. const RouteDemo: React.FC = () => {
  8. const navigate = useNavigate();
  9. const params = useParams();
  10. const [searchParams] = useSearchParams();
  11. const smartNavigate = useSmartRouter();
  12. useEffect(() => {
  13. console.log('✅ routeDemo组件挂载:componentDidMount');
  14. reportEvent('routeDemoPage_show');
  15. return () => {
  16. console.log('❌ routeDemo组件卸载:componentWillUnmount');
  17. reportEvent('routeDemoPage_hide');
  18. };
  19. }, []);
  20. return (
  21. <div className="max-w-4xl mx-auto">
  22. <Card className="bg-white rounded-lg shadow-sm">
  23. <Title level={2}>路由示例</Title>
  24. <Space direction="vertical" size="large" className="w-full">
  25. <div>
  26. <Title level={4}>1. 路由参数</Title>
  27. <Paragraph className="text-gray-600">
  28. 当前路由参数:{JSON.stringify(params)}
  29. </Paragraph>
  30. <Paragraph className="text-gray-600">
  31. 当前查询参数:{JSON.stringify(Object.fromEntries(searchParams))}
  32. </Paragraph>
  33. </div>
  34. <div>
  35. <Title level={4}>2. 路由跳转</Title>
  36. <Space wrap>
  37. <Button onClick={() => navigate('/')}>返回首页</Button>
  38. <Button onClick={() => navigate('/403')}>访问 403 页面</Button>
  39. <Button onClick={() => navigate('/404')}>访问 404 页面</Button>
  40. <Button onClick={() => navigate('/500')}>访问 500 页面</Button>
  41. <Button onClick={() => navigate('/test/test1')}>
  42. 访问 /test/test1 页面
  43. </Button>
  44. <Button onClick={() => navigate('/test/test2')}>
  45. 访问 /test/test2 页面
  46. </Button>
  47. <Button onClick={() => navigate('/hey/baby')}>
  48. 访问 不存在的 页面
  49. </Button>
  50. </Space>
  51. </div>
  52. <div>
  53. <Title level={4}>3. 带参数的路由跳转</Title>
  54. <Space wrap>
  55. <Button onClick={() => navigate('/route-demo/123?name=test')}>
  56. 跳转到 /routeDemo/123?name=test
  57. </Button>
  58. <Button onClick={() => navigate('/route-demo/456?type=user')}>
  59. 跳转到 /routeDemo/456?type=user
  60. </Button>
  61. </Space>
  62. </div>
  63. <div>
  64. <Title level={4}>4. 重定向示例</Title>
  65. <Space direction="vertical" size="middle" className="w-full">
  66. <div>
  67. <Paragraph className="text-gray-600 mb-2">
  68. 使用 navigate 的 replace 选项(替换历史记录):
  69. </Paragraph>
  70. <Space wrap>
  71. <Button onClick={() => navigate('/home', { replace: true })}>
  72. 替换跳转到首页
  73. </Button>
  74. <Button onClick={() => navigate('/feature-demo', { replace: true })}>
  75. 替换跳转到功能演示
  76. </Button>
  77. </Space>
  78. </div>
  79. <div>
  80. <Paragraph className="text-gray-600 mb-2">
  81. 使用 /to 路由进行重定向:
  82. </Paragraph>
  83. <Space wrap>
  84. <Button onClick={() => navigate('/to?d=test')}>
  85. 跳转到 /to 重定向页面
  86. </Button>
  87. </Space>
  88. </div>
  89. <div>
  90. <Paragraph className="text-gray-600 mb-2">
  91. 使用 useSmartRouter 保持查询参数:
  92. </Paragraph>
  93. <Space wrap>
  94. <Button onClick={() => smartNavigate('/home', { from: 'routeDemo' })}>
  95. 智能跳转(保留当前查询参数)
  96. </Button>
  97. <Button onClick={() => smartNavigate('/feature-demo', { id: '123' })}>
  98. 智能跳转(添加新参数)
  99. </Button>
  100. </Space>
  101. </div>
  102. </Space>
  103. </div>
  104. </Space>
  105. </Card>
  106. </div>
  107. );
  108. };
  109. export default RouteDemo;