React-Router路由基础篇
环境准备:
安装nvm和nrm,详情请看如下链接:
使用的是React脚手架:Getting Started | Create React App 中文文档
使用的是fusion组件设计:PC 官网 - 首页
使用的是react-router-dom:react-router-dom 中文文档 | 快速开始
正式开始本次使用:
一、安装react-router-dom
打开项目,打开Terminal后输入如下命令:
表示安装成功。
在package.json下有如下信息:
原始src目录下的index.js代码:
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './page/App/App';
import reportWebVitals from './reportWebVitals';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<App/>
</React.StrictMode>
);
reportWebVitals();
案例1、切换一个可以切换登录页和首页的路由系统
1、在index.js文件下引入React-router的createBrowserRouter和RouterProvider (createBrowserRouter函数是用于创建一个浏览器路由器对象,用来配置应用中的路由;RouterProvider则是一个组件,它主要是将创建的路由器对象提供个整个应用)
import {createBrowserRouter, RouterProvider} from "react-router-dom";
2、在createBrowserRouter中创建router实例对象并配置路由对应关系
const router = createBrowserRouter([
{
path: '/login',
element: <div>我是登录页</div>,
},
{
path: '/home',
element: <div>我是首页</div>,
}
])
3、使用RouterProvider组件全局注入router实例
<RouterProvider router={router}>
<App/>
</RouterProvider>
完整代码如下:
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './page/App/App';
import reportWebVitals from './reportWebVitals';
import {createBrowserRouter, RouterProvider} from "react-router-dom";
const router = createBrowserRouter([
{
path: '/login',
element: <div>我是登录页</div>,
},
{
path: '/home',
element: <div>我是首页</div>,
}
])
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<React.StrictMode>
<RouterProvider router={router}>
<App/>
</RouterProvider>
</React.StrictMode>
);
reportWebVitals();
验证:网址栏输入地址http://localhost:3001/login或http://localhost:3001/home.
案例2、对案例1中的登录页和首页进行优化
分别创建登录页和首页如下:
各自的index.js中代码如下:
login目录下的index.js代码如下:
const Login = () => {
return (
<div>
我是登录页
</div>
)
}
export default Login
home目录下的index.js代码如下:
const Home = () => {
return (
<div>
我是首页
</div>
)
}
export default Home
src下的index.js中createBrowserRouter代码修改如下:
import Login from "./page/login";
import Home from "./page/home";
const router = createBrowserRouter([
{
path: '/login',
element: <Login/>,
},
{
path: '/home',
element: <Home/>,
}
])
验证:网址栏输入地址http://localhost:3001/login或http://localhost:3001/home.
anli
案例3、对案例2进一步优化,实现路由默认跳转登录页
对src下的index.js中createBrowserRouter代码修改如下:增加一个默认路由配置
代码如下:
import {createBrowserRouter, Navigate, RouterProvider} from "react-router-dom";
const router = createBrowserRouter([
{
path: '/login',
element: <Login/>,
},
{
path: '/home',
element: <Home/>,
},
{
path: '/',
element: <Navigate to={'/login'}/>,/*使用导航的方式实现默认跳转*/
}
])
此时网址栏输入地址http://localhost:3001就会默认打开登录页。
案例4、对案例3进一步优化,实现点击登录页的按钮跳转到首页(路由导航跳转)
方法1、声明式导航(使用<Link/>组件实现跳转到哪里)
对登录页的index.js进行如下改造
import {Link} from "react-router-dom";
const Login = () => {
return (
<div>
我是登录页
<Link to={'/home'}>点我进入首页</Link>
</div>
)
}
export default Login
运行如下:
点击点我进入首页即可进入首页界面。
方法2、编程式导航(使用UseNavigate钩子函数,通过navigate()方法实现跳转)
其中Button用的是fusion组件设计。
import {useNavigate} from "react-router-dom";
import {Button} from "@alifd/next";
const Login = () => {
const navigate = useNavigate()
return (
<div>
我是登录页
<Button type={'primary'} onClick={()=>navigate('/home')}>点我进入首页</Button>
</div>
)
}
export default Login
运行如下:
点击点我进入首页即可进入首页界面。
案例5、继续对案例4进行优化,实现导航带参的传递
方法1、
使用navigate('/home?id=10000&name=MyTest')传递参数;
使用固定钩子函数useSearchParams接收参数,通过在path路径后面拼上字符串来传递参数。
语法:
navigate('/home?id=10000&name=MyTest'); //拼接字符串传递参数
const [params] = useSearchParams(); //通过useSearchParams接收参数
const id = params.get('id'); // 获取传递的参数
login的index.js代码如下:
import {useNavigate} from "react-router-dom";
import {Button} from "@alifd/next";
const Login = () => {
const navigate = useNavigate()
return (
<div>
我是登录页
<Button type={'primary'} onClick={()=>navigate('/home?id=10000&name=MyTest')}>点我进入首页</Button>
</div>
)
}
export default Login
home的index.js代码如下:
import {useSearchParams} from "react-router-dom";
const Home = () => {
const [params] = useSearchParams();
console.log("params",params.toString());
console.log("params.toJson",JSON.stringify(params.toString()));
const id = params.get('id');
const name = params.get('name');
return (
<div>
我是首页
{id}--{name}
</div>
)
}
export default Home
运行结果如下:
方法2、
使用固定钩子函数useParams接收参数,通过在path路径后面直接传递参数。
语法:
navigate('/home/10000/MyTest');
const params = useParams();
const id = params.id;
login的index.js代码如下:
import {useNavigate} from "react-router-dom";
import {Button} from "@alifd/next";
const Login = () => {
const navigate = useNavigate()
return (
<div>
我是登录页
<Button type={'primary'} onClick={() => navigate('/home/10000/MyTest')}>点我进入首页</Button>
</div>
)
}
export default Login
src的index.js中Home的路由修改如下:
const router = createBrowserRouter([
{
path: '/login',
element: <Login/>,
},
{
path: '/home/:id/:name?',
element: <Home/>,
},
{
path: '/',
element: <Navigate to={'/login'}/>,/*使用导航的方式实现默认跳转*/
}
])
其中:id表示此参数为必传;:name?表示此参数非必填。
home的index.js代码如下:
import {useParams} from "react-router-dom";
const Home = () => {
const params = useParams();
console.log("params",JSON.stringify(params));
const id = params.id;
const name = params.name;
return (
<div>
我是首页
{id}--{name}
</div>
)
}
export default Home
运行结果与方法1相同。
原文地址:https://blog.csdn.net/qq_34707150/article/details/143885414
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!