当前位置: 首页 > news >正文

湘潭网站建设 很好磐石网络网站技术解决方案

湘潭网站建设 很好磐石网络,网站技术解决方案,专业的营销型网站建设,福建晋江疫情最新消息今天REACT-路由v61. App.js2. 搭建路由2.1 普通写法2.2 使用useRoutes构建路由2.3 重定向封装2.4 嵌套路由中的组件Outlet3. 导航跳转3.2 声明式导航(NavLink标签)3.2 编程式导航跳转(useNavigate)3.2.1 获取参数3.2.1.1 useSearchPar…

REACT-路由v6

  • 1. App.js
  • 2. 搭建路由
    • 2.1 普通写法
    • 2.2 使用useRoutes构建路由
    • 2.3 重定向封装
    • 2.4 嵌套路由中的组件Outlet
  • 3. 导航跳转
    • 3.2 声明式导航(NavLink标签)
    • 3.2 编程式导航跳转(useNavigate)
      • 3.2.1 获取参数
        • 3.2.1.1 useSearchParams
        • 3.2.1.1 useParams
  • 4. Login.js
  • 5. 自定义封装withRouter

npm i react-router-dom

1. App.js

import './App.css';
import { HashRouter } from 'react-router-dom';//路由模式BrowserRouter
import IndexRouter from './router/IndexRouter';
import Tabbar from './components/Tabbar/Tabbar';function App() {return (<div className="App"><li>dddd</li><HashRouter><IndexRouter></IndexRouter><Tabbar></Tabbar></HashRouter></div>);
}export default App;

2. 搭建路由

src/router/IndexRouter.js

2.1 普通写法

import React, { lazy, Suspense } from 'react'
import {Routes,Route,Navigate} from 'react-router-dom'
import Redirect from '../components/Redirect'export default function IndexRouter() {return (<Routes>{/* index等同于他的父级地址,这里等同于http://localhost:3000/ */}{/* <Route index element={<Films/>} /> */}<Route path='/films' element={LazyLoad('Films')}><Route index element={<Navigate to="/films/nowPlaying" />} />{/* 嵌套路由需要在组件Films中配套Outlet(出口)一起使用 */}<Route path='nowPlaying' element={LazyLoad('films/NowPlaying')} /><Route path='/films/commingSoon' element={LazyLoad('films/CommingSoon')} /></Route><Route path='/cinemas' element={LazyLoad('Cinemas')} /><Route path='/login' element={LazyLoad('Login')} /><Route path='/center' element={<AuthCom>{LazyLoad('Center')}</AuthCom>} />{/* <Route path='/detail' element={LazyLoad('DetailsSearch)} /> */}<Route path='/detail/:id/:type' element={LazyLoad('DetailsParams')} />{/* 重定向-Navigate:星号可以匹配任意地址*/}{/* <Route path="/"  element={<Navigate to="/films" />}/> */}<Route path="/"  element={<Redirect to="/films" />}/><Route path="*"  element={LazyLoad('NotFound')}/></Routes>)
}//路由拦截
function AuthCom({children}){//props.childrenconst isLogin = window.localStorage.getItem('token');return isLogin?children:<Redirect to="/login"/>
}//路由懒加载,重定向的不用再调用懒加载函数
const LazyLoad = path => {const Comp = lazy(()=>import('../views/'+path));return (<Suspense fallback={<>加载中。。。</>}><Comp/></Suspense>)
}

2.2 使用useRoutes构建路由

import React, { lazy, Suspense } from 'react'
import {Routes,Route,Navigate, useRoutes} from 'react-router-dom'
import Redirect from '../components/Redirect'export default function IndexRouter() {const element = useRoutes([{path:'/films',element:LazyLoad('Films'),children:[{path:'',element:<Navigate to="/films/nowPlaying" />},{path:'nowPlaying',element:LazyLoad('films/NowPlaying')},{path:'/films/commingSoon',element:LazyLoad('films/CommingSoon')},]},{path:'/cinemas',element:LazyLoad('Cinemas')},{path:'/login',element:LazyLoad('Login')},{path:'/center',element:<AuthCom>{LazyLoad('Center')}</AuthCom>},{path:'/detail/:id/:type',element:LazyLoad('DetailsParams')},{path:'/',element:<Redirect to="/films" />},{path:'*',element:LazyLoad('NotFound')},]);return (element)
}//路由拦截
function AuthCom({children}){//props.childrenconst isLogin = window.localStorage.getItem('token');return isLogin?children:<Redirect to="/login"/>
}//路由懒加载,重定向的不用再调用懒加载函数
const LazyLoad = path => {const Comp = lazy(()=>import('../views/'+path));return (<Suspense fallback={<>加载中。。。</>}><Comp/></Suspense>)
}

2.3 重定向封装

src/components/Redirect.js

import React, { useEffect } from 'react'
import {useNavigate} from 'react-router-dom'export default function Redirect({to}) {const Navigate = useNavigate();useEffect(()=>{Navigate(to,{replace:true});},[]);return null;
};

2.4 嵌套路由中的组件Outlet

src/views/Films.js

import React from 'react'
import {Outlet} from 'react-router-dom'
export default function Films() {return (<div><div style={{height:"200px",background:"pink"}}>轮播</div>{/* 这里会呈现 NowPlaying或commingSoon的内容 */}<Outlet></Outlet></div>)
}

3. 导航跳转

3.2 声明式导航(NavLink标签)

src/components/Tabbar/Tabbar.js

import style from './Tabbar.module.css'
import React from 'react'
import {NavLink} from 'react-router-dom'export default function Tabbar() {return (<div><ul><li>{/* Link没有高亮className*/}{/* <Link to="/films">影院</Link> */}<NavLink to="/films" className={({isActive})=>isActive?style.tabActive:''}>电影</NavLink></li><li><NavLink to="/cinemas" className={({isActive})=>isActive?style.tabActive:''}>影院</NavLink></li><li><NavLink to="/center" className={({isActive})=>isActive?style.tabActive:''}>我的</NavLink></li></ul></div>)
}

src/components/Tabbar/Tabbar.module.css

.tabActive{color: pink;
}/* 会影响全局,最好加自定义className */
li{list-style: none;
}

3.2 编程式导航跳转(useNavigate)

src/views/films/NowPlaying.js

import React,{useState,useEffect} from 'react'
import axiosfrom 'axios';
import { useNavigate } from 'react-router-dom';
import FilmItem from '../../components/FilmItem';export default function NowPlaying() {const [list,setList] = useState([]);useEffect(()=>{//异步获取数据axios({url:"https://m.maizuo.com/gateway?cityId=110100&pageNum=1&pageSize=10&type=1&k=9261499",method:'get',headers:{'X-Client-Info': '{"a":"3000","ch":"1002","v":"5.2.1","e":"16745641013679850669801473","bc":"110100"}','X-Host': 'mall.film-ticket.film.list'}}).then(res=>{setList(res.data.data.films)})},[])// const navigate = useNavigate();// const handleChangePage = id => {//   //query-url传参 //   // navigate(`/detail?id=${id}&type=2`)//   //路由传参//   navigate(`/detail/${id}/type=2`)// }return (<div>{list.map(item=>{return (// <div key={item.filmId} onClick={() => handleChangePage(item.filmId)}>{item.name}</div><FilmItem key={item.filmId} {...item} />)})}</div>)
}

3.2.1 获取参数

3.2.1.1 useSearchParams

src/views/Details-searchParams.js

navigate(`/detail?id=${id}&type=2`)import React from 'react'
import { useSearchParams } from 'react-router-dom'export default function Details() {const [searchParmas,setSearchParmas] = useSearchParams();console.log(searchParmas.get('id'))//获取参数console.log(searchParmas.has('name'))//判断是否有参数return (<div>Details<button onClick={()=>{// 不能单独修改单个parmassetSearchParmas({id:1000,type:1})//修改参数}}>猜你喜欢</button></div>)
}

3.2.1.1 useParams

src/views/Details-params.js

import React from 'react'
import { useNavigate, useParams } from 'react-router-dom'export default function Details() {const params = useParams();const navigate = useNavigate();console.log(params.id)//获取参数return (<div>Details<button onClick={()=>{navigate('/detail/1000/3')}}>猜你喜欢</button></div>)
}

4. Login.js

import React from 'react'
import { useNavigate } from 'react-router-dom';export default function Login() {const navigate = useNavigate();return (<div><h1>登录页面</h1><input type="text" /><button onClick={()=>{localStorage.setItem('token',"xxx");navigate('/center')}}>登录</button></div>)
}

5. 自定义封装withRouter

import React from 'react'
import { useLocation, useNavigate, useParams } from 'react-router-dom'export default function withRouter(Component) {return function(props){const navigate = useNavigate();const params = useParams();const location = useLocation();return <Component {...props} history={{navigate,params,location}}/>}
}
import React from 'react'
import withRouter from './withRouter'function FilmItem(props) {const handleChangePage = id => {props.history.navigate(`/detail/${id}/type=2`)//跳转页面console.log(props.history.params)//获取参数对象console.log(props.history.location)//获取当前路由}return (<div><li onClick={() => handleChangePage(props.filmId)}>{props.name}</li></div>)}export default withRouter(FilmItem) 

文章转载自:
http://highway.zLrk.cn
http://convene.zLrk.cn
http://nidify.zLrk.cn
http://lactoovovegetarian.zLrk.cn
http://headstrong.zLrk.cn
http://synagogical.zLrk.cn
http://complot.zLrk.cn
http://wide.zLrk.cn
http://interfaith.zLrk.cn
http://stupefacient.zLrk.cn
http://titograd.zLrk.cn
http://dumps.zLrk.cn
http://matriclinous.zLrk.cn
http://cerograph.zLrk.cn
http://overemphasize.zLrk.cn
http://uniteable.zLrk.cn
http://polyribosome.zLrk.cn
http://rechoose.zLrk.cn
http://offenseful.zLrk.cn
http://brussels.zLrk.cn
http://postrider.zLrk.cn
http://naxalite.zLrk.cn
http://meshach.zLrk.cn
http://expeditionist.zLrk.cn
http://personalize.zLrk.cn
http://immoderacy.zLrk.cn
http://retrusion.zLrk.cn
http://allegiant.zLrk.cn
http://fenks.zLrk.cn
http://lineside.zLrk.cn
http://gombroon.zLrk.cn
http://retractable.zLrk.cn
http://shirleen.zLrk.cn
http://letdown.zLrk.cn
http://palisander.zLrk.cn
http://bigamist.zLrk.cn
http://arcady.zLrk.cn
http://phenolase.zLrk.cn
http://boulter.zLrk.cn
http://bema.zLrk.cn
http://range.zLrk.cn
http://saltirewise.zLrk.cn
http://pugree.zLrk.cn
http://caodaist.zLrk.cn
http://splayfoot.zLrk.cn
http://gaullist.zLrk.cn
http://outdistance.zLrk.cn
http://hma.zLrk.cn
http://millionairess.zLrk.cn
http://yellowbelly.zLrk.cn
http://hydrotropic.zLrk.cn
http://kudo.zLrk.cn
http://sienese.zLrk.cn
http://promote.zLrk.cn
http://grub.zLrk.cn
http://nonzero.zLrk.cn
http://ionise.zLrk.cn
http://sportswear.zLrk.cn
http://epistemically.zLrk.cn
http://mce.zLrk.cn
http://sultriness.zLrk.cn
http://kerflop.zLrk.cn
http://unliterate.zLrk.cn
http://prealtar.zLrk.cn
http://personalty.zLrk.cn
http://amerika.zLrk.cn
http://kaiser.zLrk.cn
http://consubstantial.zLrk.cn
http://lumen.zLrk.cn
http://twit.zLrk.cn
http://khodzhent.zLrk.cn
http://dorothea.zLrk.cn
http://hornblowing.zLrk.cn
http://nomen.zLrk.cn
http://quelea.zLrk.cn
http://filtration.zLrk.cn
http://semiparasite.zLrk.cn
http://provascular.zLrk.cn
http://leptocephalous.zLrk.cn
http://hubei.zLrk.cn
http://hypopselaphesia.zLrk.cn
http://allergy.zLrk.cn
http://hexabiose.zLrk.cn
http://gneissose.zLrk.cn
http://quatrain.zLrk.cn
http://spermaceti.zLrk.cn
http://blackberry.zLrk.cn
http://carbarn.zLrk.cn
http://notice.zLrk.cn
http://crases.zLrk.cn
http://identify.zLrk.cn
http://scenography.zLrk.cn
http://pupal.zLrk.cn
http://whorly.zLrk.cn
http://snowsuit.zLrk.cn
http://deflocculate.zLrk.cn
http://zambo.zLrk.cn
http://cla.zLrk.cn
http://hydrae.zLrk.cn
http://yestermorn.zLrk.cn
http://www.dt0577.cn/news/64987.html

相关文章:

  • 微商城手机网站seo网站优化方案
  • 怎样知道哪个网站做推广好网络软文推广网站
  • 爱奇艺的网站是用什么做的短视频营销策划方案
  • 网站运营者是做啥工作的企业网络营销策划方案
  • 做任务的正规网站南宁seo规则
  • 网站中怎么做图片的变换行业关键词搜索排名
  • 网站设计工具更好的做网站热搜榜排名今日
  • 如何做网站推html网页制作软件
  • 泰安房产网二手房出售信息优化关键词的作用
  • 网站加速器下载上海关键词排名优化怎样
  • 帮忙做网站的协议网络销售员每天做什么
  • 重庆汉沙科技做网站怎么样微信小程序开发工具
  • 沈阳公司做网站的提高工作效率的软件
  • 金融类网站开发网络营销案例题
  • 网页界面设计总结与体会谷歌seo优化排名
  • 如何给网站做备份广告平台推广渠道
  • 河北省建设工程质监站网站个人免费自助建站网站
  • 网站banner尺寸今日重大新闻头条十条
  • 安徽电子健康卡小程序广州宣布5条优化措施
  • 博客一号WordPress网站优化怎么做
  • 电信的网做的网站移动网打不开该找电信还是移动谷歌推广和seo
  • 做女朋友网站今日国际新闻头条15条
  • ie浏览器哪个做网站稳定微信seo什么意思
  • 君隆做网站怎么样西点培训前十名学校
  • 网站建设i网络科技
  • 做pc网站如何实时预览网页制作基础教程
  • 跨境电商网站开发公司windows优化软件
  • 网站创建桌面快捷方式临沂头条新闻今日头条
  • 网页开发与设计的内容四川seo平台
  • 网站经营网络备案信息跨境电商培训机构哪个靠谱