使用react+vite快速创建react项目
创建一个react-router的项目
npm create vite@latest react-router --template reace
yarn create vite react-router --template react
安装react-router-dom路由
1.因为使用的vite安装,所以是还未下载项目依赖需要先npm i 或者 yarn2.再到在新建的项目文件夹终端运行 npm install react-router-dom
安装路由路由方式BrowserRouter(history)和HashRouter(Hash)
import {BrowserRouter} from ‘react-router-dom’ 通过引入路由方式
1.BrowserRouter:内核为浏览器的history,经过二次封账成BrowserRouter。
2.HashRouter:根据url的#哈希值的变化。
hash和history只有url是否拼接#号的区别。这里就用BrowserRouter模式。
简单理解使用
在src文件夹下的App.jsx中引入路由
import {BrowserRouter,Routes,Route,Link} from 'react-router-dom'
BrowserRouter:包裹路由组件,声明使用history模式。
Link:是一个跳转的链接。经过编译后是<a>
标签。
Routes:路由注册表用来包裹同一层级路由。
Route:注册路由,根据url的变化映射对应的element组件。
<BrowserRouter><Link to='/'>主页</Link><Link to='/about?id=123'>关于</Link><Routes><Route path='/' element={<Home></Home>}></Route><Route path='/about' element={<About></About>}></Route></Routes></BrowserRouter>
当使用Link进行跳转时直接进行参数拼接即可to=‘/about?id=123’
使用的hooks函数,编程试跳转传参
import {useNavigate} from 'react-router-dom'
useNavigate:只可以在已注册的路由组件中引入跳转到其他路由组件。
我们在Home的函数中调用:const Navigate = useNavigate()
在事件的回调函数中执行: Navigate(
/about?id=${msg})
就会引起路由的切换
接收参数
import {useSearchParams} from 'react-router-dom'
useSearchParams:接收url中以问号拼接的参数。
在引入这个hooks函数后调用 const [params] = useSearchParams()
使用params.get('id')
把参数的键传入,就可以拿到参数的值
以上是问号拼接的方式
用‘/’路径形式传参的方法
例如:to='/about/123'
我们需要在注册路由时提前声明好,about后用斜杠拼接的是参数。
<Route path='/about/:id' element={<About></About>}></Route>
做好声明后就可以直接使用斜杠拼接参数了
<button onClick={()=>navgete(`/about/${msg}`)}>发送到关于</button>
使用字符串的模板拼接语法,在/后拼接了一个msg
如何获取拼接的参数?和问号拼接的不同。
import {useParams} from 'react-router-dom'
useParams:获取url’/'路径拼接参数的hooks函数
const params = useParams()
params.id
获取msg的值
出现的问题
我们发现,这个路由组件和静态页面写到一起的话非常繁杂,不易于维护。如果有新入职的程序员看见堆积如山的代码,是个什么样的心情呢? 所以我们使用模块化开发。我们把路由组件提取出来形成一个新组件再和主页面放在一起。就会变得有层次感,写出优雅的代码。
我们创建一个路由层。routes文件夹index.jsx。
import {useRoutes} from 'react-router-dom'
useRoutes:路由注册表hooks函数。
import Home from '../pages/home'
import About from '../pages/about'
const routes = [{path:'/',element:<Home/>},{path:'/',element:<About/>},{path:'*',element:<NotFround/>}
]
function element(){const el = useRoutes(routes)return el
}
export default element
useRoutes()根据url的变化返回一个路由组件。
我们再到App.jsx中引入抛出的函数
路由方式的包裹BrowserRouter还是不能少的。
以上是学习react-router-dom的个人理解。感谢
最后
整理了75个JS高频面试题,并给出了答案和解析,基本上可以保证你能应付面试官关于JS的提问。
有需要的小伙伴,可以点击下方卡片领取,无偿分享