首页 > 其他分享 >【React系列六】—React学习历程的分享

【React系列六】—React学习历程的分享

时间:2024-10-30 14:48:07浏览次数:3  
标签:react About 历程 element React router import 分享 路由

前言

接系列五讲解Router5之后,最新的路由版本是React-Router6,一些新增特性及使用方法讲解

一、Router6和Router5的区别

React Router 发布了三个不同的包:

  • react-router:路由核心库,提供许多组件、钩子
  • react-router-dom:包括了 react-router 所有内容,同时添加了用于 DOM 的组件,如 <BrowserRouter>
  • react-router-native:包括了 react-router 所有内容,同时添加了用于 ReactNative 的 API,如 <NativeRouter>

与 React Router 5.x 版本的区别:

  • 内置组件的变化:移除 <Switch />,新增 <Routes />……
  • 语法变化:component={About} 变成 element={<About/>}……
  • 新增 hook:useParams、useNavigate、useMatch……
  • 官方明确表示推荐使用函数式组件

二、安装及其基本使用

npm install react-router-dom

index.js文件引入<BrowserRouter>

// 从 react-dom/client 引入 ReactDOM
import ReactDOM from 'react-dom/client'
import { BrowserRouter } from 'react-router-dom'
import App from './App'

// React 18 的语法发生改变了
ReactDOM.createRoot(document.getElementById('root')).render(
  <BrowserRouter>
    <App />
  </BrowserRouter>
)

基本使用

<BrowserRouter> 用于包裹整个应用。

<HashRouter> 修改的是地址栏的 hash 值。

6.x 版本中 <HashRouter>、<BrowserRouter> 的用法与 5.x 相同。

6 版本中移出了 <Switch>,引入了新的替代者:<Routes>。

<Routes> 和 <Route> 要配合使用,且必须要用 <Routes> 包裹 <Route>

三、路由重定向

只要 <Navigate> 组件被渲染,就会修改路径,切换视图。可用于路由重定向

replace 属性用于控制跳转模式(push 或 replace,默认是 push)

import { NavLink, Routes, Route, Navigate } from 'react-router-dom'
import About from './components/About/About'
import Hello from './components/Hello/Hello'

export default function App() {
  return (
    <div>
      <NavLink to="/about">About</NavLink>
      <NavLink to="/hello">Hello</NavLink>
      <hr />
      <Routes>
        <Route path="/about" element={<About />}></Route>
        <Route path="/hello" element={<Hello />}></Route>
        <Route path="/" element={<Navigate to="/about" />}></Route>
      </Routes>
    </div>
  )
}

四、useRoutes()路由表

路由规则可以单独抽出一个模块、一个文件统一管理路由

// 路由表
// routes/index.js
import { Navigate } from 'react-router-dom'
import About from '../components/About/About'
import Hello from '../components/Hello/Hello'

const routes = [
  {
    path: '/about',
    element: <About />,
  },
  {
    path: '/hello',
    element: <Hello />,
  },
  {
    path: '/',
    element: <Navigate to="/about" />,
  },
]

export default routes
// 引入路由表
// App.js
import { NavLink, useRoutes } from 'react-router-dom'
import routes from './routes'

export default function App() {
  // 生成路由规则
  const element = useRoutes(routes)

  return (
    <div>
      <NavLink to="/about">About</NavLink>
      <NavLink to="/hello">Hello</NavLink>
      <hr />
      {element}
    </div>
  )
}

五、嵌套路由

  • 嵌套路由中,需要使用 <Outlet> 设置子路由的路由出口,即在何处渲染子路由
  • 设置二级路由链接时,可以是 to="news"、to="./news",但不能是 to="/news"

不使用路由表的嵌套路由:

// App.js
export default function App() {
  return (
    <div>
      <NavLink to="about">About</NavLink>
      <NavLink to="hello">Hello</NavLink>
      <hr />
      <Routes>
        <Route path="about" element={<About />} />
        <Route path="hello" element={<Hello />}>
          <Route path="news" element={<News />} />
          <Route path="message" element={<Message />} />
        </Route>
        <Route path="/" element={<Navigate to="about" />} />
      </Routes>
    </div>
  )
}

使用路由表的嵌套路由:

// 路由表
const routes = [
  {
    path: '/about',
    element: <About />,
  },
  {
    path: '/hello',
    element: <Hello />,
    // 定义二级路由,注意不要加 /
    children: [
      {
        path: 'news',
        element: <News />,
      },
      {
        path: 'message',
        element: <Message />,
      },
    ],
  },
  {
    path: '/',
    element: <Navigate to="/about" />,
  },
]

有不明白的或者有其他问题的可以评论区留言噢

今天的知识分享就到这里啦~希望大家在这能学到知识一起分享一起进步,成为更好的自己!

 

标签:react,About,历程,element,React,router,import,分享,路由
From: https://blog.csdn.net/m0_60623820/article/details/143364162

相关文章

  • 全网爆火神书《从零构建大模型》分享,尚未发布,GitHub标星22k!
    本书介绍《从零构建大模型》是一本即将于今年10月底发布的书籍,github已经吸引了惊人的21.7k标星!作者是威斯康星大学麦迪逊分校的终身教授,在GitHub、油管、X上拥有大量粉丝,是一位真正的大佬。本书免费获取地址:在本书中,读者将从内到外了解LLM的工作原理。在这本富有洞......
  • “山林不向四季起誓,荣枯随缘”——C语言(爱心+祝福语)代码分享
                    在数字的海洋中,代码是我们共舞的音符。它们跳跃、旋转,编织出一个个美丽的故事。        每一行代码,都像是精心挑选的词汇,构建起我们共同的语言。        在这个由0和1构成的世界,我们用逻辑与情感交织,创造出无数可能。  ......
  • react.js中何时使用useCallback
    useMemo用于记住值,减少重新渲染组件所需的时间。useCallback用于记住函数,通常是为了防止组件的重新渲染举例子组件接收回调函数作为 props父组件引入子组件:constgetList=useCallback(()=>fetch(`http://example.com/api/${userId}`),[userId],);return(<buttonon......
  • React前端框架
    1.React简介1.1React的起源和发展React是由Facebook的内部项目发展而来,最初用于构建Instagram的网站。2013年5月,React正式对外开源,迅速以其高效的性能和灵活的组件化特点受到开发者的广泛关注和使用。React的核心库主要关注于构建UI,因此常被认为是MVC(模型......
  • [分享]Python学习你看这一篇就够了!(四)
    本文你将看到四.面向对象编程8:面向对象编程基础类和对象的概念类(Class):类是一种抽象的数据类型,它是对具有相同属性和行为的一组对象的描述。可以将类看作是创建对象的蓝图或模板。例如,“汽车”是一个类,它定义了汽车共有的属性(如品牌、颜色、车轮数量等)和行为(如启动、......
  • 微信小程序客服分享悬浮按钮代码
    以下代码可用于在微信小程序中的客服咨询与用户分享操作。按钮通过设置plain=‘true’来使其显示为简单的图标按钮,按钮的位置和样式通过CSS进行了详细的定制,确保在不同屏幕大小和设备上都能良好显示和使用,以下为参考代码。代码实现样式一,无文字有图片<buttonplain......
  • 《Java 大厂面试基础真题及解析 —— 来自一位程序员的心得分享》
    作为一名Java程序员,在经历了众多面试后,深知Java基础在大厂面试中的重要性。以下是我总结的一些常被问到的Java基础面试题及解析,希望对大家有所帮助。2024Javaoffer收割指南分享一、面向对象的三大特性(一)封装概念封装是将数据和操作数据的方法绑定在一起,形成一个......
  • react.js中useMemo和useEffect的区别
    1、当messages发生变化时执行scrollToBottom方法useEffect(()=>{scrollToBottom();},[messages]);constscrollToBottom=()=>{//页面滚动到底部messagesEndRef.current?.scrollIntoView({behavior:"smooth"});}以上例子中,useEffect可以用useMemo代替吗?不可......
  • 如何区分工程招标过程中的控制价、拦标价与标底价?蓝燕云项目投标管理专家分享。
    在招投标过程中,控制价、拦标价与标底价这三个概念常常被提及,但它们之间那些不为人知的区别,你是否真正了解呢?01各自的定义控制价:在工程发包进程里,招标人依据相关计价规定算出的工程造价。它就像是一道“天花板”,是招标人用于对招标工程发包设定的最高控制限价,在某些地方,它还......
  • 我用Replicate训练了个纹身Flux AI LORA模型,分享下经验
    #我用Replicate训练了个纹身AI模型,分享下经验##起因最近一直在研究AI辅助设计,正好我对纹身设计特别感兴趣。经过一段时间摸索,用Replicate平台训练了一个还不错的纹身设计模型。目前已经整合到了Hottattoo.AI平台上。其实一开始我也在纠结要不要自己训练模型,毕竟网上现成的模......