react 路由完整版「建议收藏」

react 路由完整版「建议收藏」import{BrowserRouter}from’react-router-dom’1、用BrowserRouter管理整个应用 在index.js中,将<App/>用<BrowserRouter>包裹起来2、路由跳转 import{NavLink,Link}from’react-router-dom’ NavLink和Link都可以实现,且用法相同 <NavLinkto=’/about’>About</NavLink&g

大家好,又见面了,我是你们的朋友全栈君。

cnpm install -S  react-router-dom@4.3.1

1、用BrowserRouter管理整个应用
	import {BrowserRouter} from 'react-router-dom'
	
	在index.js中,将<App />用<BrowserRouter>包裹起来,内部只能有一个根容器

2、路由跳转
	import {NavLink,Link} from 'react-router-dom'
		NavLink和Link都可以实现,且用法相同
		
		<NavLink to='/about'>About</NavLink>
    	<NavLink to='/home'>home</NavLink>
    	
3、路由显示(放在哪就在哪显示)
	import {Switch,Route,Routes} from 'react-router-dom'
		Switch:重复路径只匹配第一个
		Routes:v6版本用来替代Switch
		exact:精准匹配,一般放置在根路由,当'/'和'/xx',将exact放置在'/'路由上,访问'/xx'不会显示'/'
		strict:严格匹配,即'/main'和'/mian/'不一样
	
	<Route exact path='/' component={Home}></Route>
	<Route path='/about' component={About}></Route>

4、路由重定向
    import {Redirect} from 'react-router-dom'
    	不能放置在路由显示的第一个位置,否则无法触发
    	打开页面浏览器会自动重定向到'/about'路由  
    <Redirect to='/about'></Redirect>
    <Redirect from='/当前路由' to='/指定路由'> 从当前路由跳转到指定路由
    
    	其中在动态使用重定向需要return
    		        if(xx)
			        {
			            return <Redirect to={redirectTo}></Redirect>
			        }

    		
  
5、路由高亮选中样式
	<NavLink to='/home' activeClassName="selected">home</NavLink>
		封装标签后:
			在标签上使用 {...this.props}  能将组件传递的参数/样式,全部放进标签上

6、路由嵌套
	父路由:
		NavLink指定跳转链接,路径要加上父路由的路径,'/x/xx'
		Switch和Route指定子路由显示位置
		Redirect对子路由重定向

7、路由跳转携带参数
	参数传递以及参数名设置
		NavLink中:to={to='/home/msg/detail/参数'},变量使用{`${}`}或字符串拼接
		Route中:path='/home/msg/detail/:接收参数名?'
			‘?’号表示为可选参数
		
	调用参数:
		this.props.match.params.参数名

8、动态跳转
	this.props.history.push('路径'') /('路径',{参数键值对})
	this.props.history.replace('xx')
	this.props.history.go(数值);  根据栈来跳转
	this.props.history.goBack();
	this.props.history.goForward();
	
	方式一:
		<Route path='/home/msg/detail/:id' component={Detail}> </Route>
		回调中:this.props.history.push('/home/msg/detail/5')
		接收:{this.props.match.params.id}
		
	方式二:
		回调中:this.props.history.push('/home/msg/detail',{id:5})
		接收:{this.props.location.state.id}
		
9、获取当前路由的url('/xx')
		this.props.location.pathname;
		
10、非路由组件使用路由组件属性(props.history等)
		import {withRouter} from 'react-router-dom'
		最后导出组件:export default withRouter(组件);
		
11、离开页面弹窗
		import {Prompt} from 'react-router-dom'
		
		<Prompt 
			when={触发条件}   不写,则离开当前页面时触发弹窗
			message='弹窗内容' / {(location)=>{ 可以通过函数返回内容 }}
		/>

代码示例:
index.js:

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';
import { 
   BrowserRouter} from 'react-router-dom'

ReactDOM.render(
  <BrowserRouter>
      <App />
  </BrowserRouter>
,
  document.getElementById('root')
);

// If you want your app to work offline and load faster, you can change
// unregister() to register() below. Note this comes with some pitfalls.
// Learn more about service workers: https://bit.ly/CRA-PWA
serviceWorker.unregister();

App.js:

import React from 'react';
import './App.css';
import About from './views/about'
import Home from './views/home'
import { 
   NavLink,Switch,Route,Link,Redirect} from 'react-router-dom'

import CADD from './components/comment_add/commentAdd.jsx';
import CAI from './components/comment_list/commentList';
class App extends React.Component{ 
   
  state={ 
   
    searchName:''
  }

  setName=(searchName)=>{ 
   
    this.setState({ 
   
      searchName:searchName
    });

  }
  render()
  { 
   
    
    return(
      
      <div>
        <NavLink to='/about' activeClassName="selected" >About</NavLink>
        <NavLink to='/home'  activeClassName="selected">home</NavLink>

          <div>
            <Switch>
              <Route path='/about' component={ 
   About} ></Route>
              <Route path='/home' component={ 
   Home}></Route>
              <Redirect to='/about'></Redirect>
            </Switch>
          </div>
      </div>
    )
  }

}

export default App;


子路由:

import React,{ 
    Component } from "react";
import { 
   NavLink,Route,Redirect,Switch} from 'react-router-dom'
import News from './news';
import Msg from './msg';
import './home.css';

export default class App extends Component{ 
   
    
    render()
    { 
   
        return(
            <div>
                <div>
                    <NavLink to='/home/news' activeClassName='selected2'>news</NavLink>
                    <NavLink to='/home/msg' activeClassName='selected2'>msg</NavLink>
                </div>

                <Switch>
                    <Route path='/home/news' component={ 
   News}></Route>
                    <Route path='/home/msg' component={ 
   Msg}></Route>
                    <Redirect to='/home/news'></Redirect>
                </Switch>

            </div>
        )
    }
}

子子路由:

import React,{ 
    Component } from "react";
import { 
   NavLink,Route,Redirect,Switch} from 'react-router-dom'
import './home.css';
import Detail from './detail';

export default class App extends Component{ 
   
    
    render()
    { 
   
        return(
            <div>
                <ul>
                    <NavLink activeClassName='selected2'to='/home/msg/detail/1'>msg1</NavLink>
                    <NavLink activeClassName='selected2'to='/home/msg/detail/2'>msg2</NavLink>
                    <NavLink activeClassName='selected2'to='/home/msg/detail/3'>msg3</NavLink>
                </ul>
                <button onClick={ 
   this.back}>返回</button>
                <button onClick={ 
   this.go}>前进</button>
                <div>
                    <Switch>
                        <Route path='/home/msg/detail' component={ 
   Detail}> </Route>
                    </Switch>
                </div>

            </div>
           
        )
    }
    back=()=>{ 
   
        this.props.history.push('/home/msg/detail',{ 
   id:5})
    }
    go=()=>{ 
   

    }
}

子子子路由:

import React,{ 
    Component } from "react";

export default class App extends Component{ 
   
    
    render()
    { 
   
        return(
            <div>
                { 
   /* <li>{this.props.match.params.id}</li> */}
                <li>{ 
   this.props.location.state.id}</li>

            </div>
        )
    }
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/130459.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 汉宫秋月曲谱_离人愁简谱

    汉宫秋月曲谱_离人愁简谱喜欢古风的朋友赶快凑过来啦,最近抖音上超火的离人愁拇指琴教学,喜欢离人愁的小姐姐小哥哥赶快学起来啦!以下琴谱适用于HughTraceyG调17键。南非琴出厂调音是G调排列,习惯了C调音阶排列的朋友可能对G调排列不是很适应。因为两者琴键对应的“数字音贴”位置不同。两者曲子的演奏效果会有所不同。考虑到大部分人习惯C调音阶排列,所以文章内分享的曲谱适用于C调17键。(PS适合经常使用拇指琴的小可爱,…

    2022年8月29日
  • java webservice asmx_WebService-asmx后缀接口调用[通俗易懂]

    java webservice asmx_WebService-asmx后缀接口调用[通俗易懂]简述:.asmx是webservice服务程序的后缀名,ASP.NET使用.asmx文件来对WebServices的支持。.asmx文件和.aspx文件一样都属于文本文件。它包含在.aspx文件之中,成为ASP.NET应用程序的一部分。废话不多说上代码POM引用commons-discoverycommons-discovery0.2webService接口调用,并解析@Overridep…

    2022年6月12日
  • 苹果录屏gif_动态录屏

    苹果录屏gif_动态录屏作为一名优秀的前端程序员,想要输出内容,总需要制作一些动图(前端动效、功能预览、代码讲解等),接下来咱们说一下,使用Mac录屏,并转成Gif格式动图的方法:工具:Mac、QQ操作步骤:1.打开QQ(没有安装QQ的话,请自行安装)使用QQ聊天对话框中的截图功能(小剪刀),选中“录屏”功能。或者使用快捷键command+shift+A2.按照提示,选择要录屏的区域进行视频录制。如下图:…

    2022年9月20日
  • 2015年最新Android基础入门教程目录(完结版)

    2015年最新Android基础入门教程目录(完结版)2015年最新Android基础入门教程目录(完结版)前言:关于《2015年最新Android基础入门教程目录》终于在今天落下了帷幕,全套教程共148节已编写完毕,附上目录,关于教程的由来,笔者的情况和自学心得,资源分享以及一些疑问等可戳:下面是本系列教程的完整目录:

    2022年5月2日
  • 增长黑客目录_黑客手册书籍

    增长黑客目录_黑客手册书籍增长黑客手册——02增长黑客的数据分析方法趋势分析多维分解漏斗分析用户画像细查路径留存分析A/B测试增长黑客的能力市场营销技能搜索引擎优化(SearchEngineOptimization)营销自动化(MarketingAutomation)病毒传播(ViralRefferal)内容营销工程开发技能应用程序接口A/B测试数据分析技能数据统计数据分析数据的9款工具市场营销工具产品工程工具数据分析增长黑客的数据分析方法趋势分析通过对业务指标的检测研究用户规律,寻找增长点多维分解从多个维度进行拆

    2022年9月16日
  • spdlog学习笔记

    spdlog学习笔记说明:所有内容翻译自spdlog的wiki,受英语水平所限,有所错误或失真在所难免,如果您有更好的建议,请在博文下留言。线程安全spdlog::命名空间下的是线程安全的,当loggers在不同的线程同时执行时,下述函数不应该被调用:spdlog::set_error_handler(log_err_handler);//orlogger->set_error_handler(…

    2022年6月23日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号