首页 > 其他分享 >React路由与RTK的使用

React路由与RTK的使用

时间:2023-01-18 00:44:13浏览次数:50  
标签:count react const RTK React state import Foo 路由

ReactRouter与 Redux

ReactRouterV6.4

npm i react-router-dom
npm install sass

src/App.js

// import logo from './logo.svg';
import './App.css';
import { Link, Outlet } from 'react-router-dom';

function App() {
  return (
    <div className="App">
      <h2>react</h2>
      <Link to="/">首页</Link> | <Link to="/about">关于</Link>
      <Outlet />
    </div>
  );
}

export default App;

src/router/index.js

import { createBrowserRouter } from "react-router-dom"
import Home from "../views/Home/Home"
import About from "../views/About/About"
import Foo from "../views/Foo/Foo"
import Bar from "../views/Bar/Bar"
import App from '../App'

const routes = [
  {
    path: '/',
    element: <App />,
    children: [
      {
        path: '',
        element: <Home />
      },
      {
        path: 'about',
        element: <About />,
        children: [
          {
            path: 'foo',
            element: <Foo></Foo>
          },
          {
            path: 'bar',
            element: <Bar></Bar>
          }
        ]
      }
    ]
  }
]

const router = createBrowserRouter(routes)

export default router
image-20230116004511265

动态路由与编程式路由模式

src/router/index.js

{
  path: 'foo/:id',
  element: <Foo></Foo>
},

src/views/Foo/Foo.jsx

import React from 'react'
import './Foo.scss'
import { useParams } from 'react-router-dom'

export default function Foo() {
  const params=useParams()
  return (
    <div>Foo,{params.id}</div>
  )
}

src/views/About/About.jsx

import React from 'react'
import { Link, Outlet, useNavigate } from 'react-router-dom'
import './About.scss'

export default function About() {
  const naviegate=useNavigate()
  const handleClick=()=>{
    naviegate('/about/bar')
  }
  return (
    <div>
      <h3>About</h3>
      {/* <Link to='/about/foo'>foo</Link> | <Link to='/about/bar'>bar</Link> */}
      <Link to='/about/foo/123'>foo123</Link> | <Link to='/about/foo/456'>foo456</Link>
      <button onClick={handleClick}>跳转到bar</button>
      <Outlet></Outlet>
    </div>
  )
}
image-20230116013206746

useLocation与useSearchParams

src/views/Bar/Bar.jsx

import React from 'react'
import { useLocation, useSearchParams } from 'react-router-dom'
import './Bar.scss'

export default function Bar() {
  const location = useLocation()
  console.log(location)
  const [searchParams, setSearchParams] = useSearchParams()
  console.log(searchParams.get('username'))
  // const handleClick = () => {
  //   setSearchParams({ age: 20 })
  // }

  // return <div onClick={handleClick}>Bar</div>
  return <div>Bar</div>
}
image-20230116014644118

默认路由展示与重定向路由与 404 页面

src/router/index.js

import { createBrowserRouter, Navigate } from "react-router-dom"
import Home from "../views/Home/Home"
import About from "../views/About/About"
import Foo from "../views/Foo/Foo"
import Bar from "../views/Bar/Bar"
import App from '../App'

const routes = [
  {
    path: '/',
    element: <App />,
    errorElement:<div>404</div>,
    children: [
      {
        path: '',
        element: <Home />
      },
      {
        path: 'about',
        element: <About />,
        children: [
          {
            index: true,
            // element:<div>默认的内容</div>
            element:<Navigate to="/about/foo/123"></Navigate>
          },
          {
            path: 'foo/:id',
            element: <Foo></Foo>
          },
          {
            path: 'bar',
            element: <Bar></Bar>
          },
          {
            path:"*",
            element:<div>404</div>
          }
        ]
      }
    ]
  }
]

const router = createBrowserRouter(routes)

export default router
image-20230116021814747 image-20230116021842215 image-20230116021909056

路由 loader 函数与 redirect 方法

src/router/index.js

{
  path: 'bar',
    element: <Bar></Bar>,
  loader: async () => {
    let ret = await new Promise((resolve) => {
      setTimeout(() => {
        resolve({ errorcode: Math.random() > 0.5 ? 0 : -1 })
      }, 1000)
    })
    if(ret.errorcode===0){
      return ret
    }
    else{
      console.log('/home')
      return redirect('/')
    }
  },
},

src/views/Bar/Bar.jsx

import React from 'react'
import { useLoaderData } from 'react-router-dom'
import './Bar.scss'

export default function Bar() {
  const data = useLoaderData()
  console.log(data)
  return <div>Bar</div>
}
image-20230116111500868

自定义全局守卫与自定义元信息

src/components/BeforeEach.jsx

import React from 'react'
import { matchRoutes, Navigate, useLocation } from 'react-router-dom'
import { routes } from '../router'

export default function BeforeEach(props) {
  const location = useLocation()
  console.log('beforeEach')
  const matchs = matchRoutes(routes, location)
  // console.log('

标签:count,react,const,RTK,React,state,import,Foo,路由
From: https://www.cnblogs.com/hwq1009/p/17059000.html

相关文章

  • 安装react脚手架,运行
    npmuninstallcreate-react-app-g(以前创建过脚手架的话先进行卸载再重新安装以适配最新版本此步骤可逃过失败也是正常现象)npminstallcreate-react-app-g安装脚手......
  • React:开发者工具谷歌插件下载安装
    React:开发者工具谷歌插件最近学习前端react主要是想大概浏览一下,这里提供尚硅谷的是视屏资料中的谷歌插件的下载。(如有侵权联系删除)这里提供我的下载地址,其中除了插件,还有......
  • 自定义react项目脚手架
    呀呀呀呀,快过年啦,开心!而且之前一直想做的2个事,一个从0到1自定义开发ui组件库(从0到1开发一个自己的ui库)已经做好啦,还有一个做个自定义的脚手架,现在也做好啦。2个flag完成,开......
  • openwrt单口旁路由模式开启ipv6
    光猫改桥接硬路由拨号并开启ipv6这些不用说了百度一大堆确保你硬路由拨号那边配置好ipv6并在电脑上测试得到了ipv6地址可以通过test-ipv6.com监测我这边是esir编译......
  • React: 路由重定向
    解决方案参考链接https://v5.reactrouter.com/web/example/route-config......
  • React:styled-components有趣的用法
    背景用于记录一些styled-components的有趣的用法绑定a标签的链接编写伪类在styleComponents中使用参数传入参数......
  • React: 动态添加样式
    问题背景在软件开发过程中,经常会出现动态添加style或className,比如:同一个表格组件在A处调用,需要固定前四列数据,B处调用则不用,那这时候,动态添加元素就派上了用场。解决方......
  • React-antd-tree-transfer
    import{Tree,Button,Card}from'antd';import{useEffect,useState}from'react';import'./App.css'consttreeData=[{title:'0-0',key:'0......
  • cita-sdk react16.9 依赖安装及运行问题经验记录
    运行环境查找选择node稳定版本发布时间,技术框架发布时间一致即可nodev10.18.0reactv16.9.0pythonv2.7.18安装cita-sdk一直报错上面两个错误一直循环报错,但最后......
  • React Tree树形结构封装工具类
    需要依赖 immutable,用于groupby分组buildTree为入口方法,注意返回的是Immutable.List对象,使用需要调用.toJS()方法转为普通对象其中 creatNode方法为构建节点对象,可根......