zoukankan      html  css  js  c++  java
  • 21 路由跳转的方式

    1,push

    2,replace

    push,添加一个路由历史,replace 是替代最后一个路由历史,注意区别

    可分别定义 使用 push 和 使用 replace 进行路由跳转的方法,进行效果的比对,

     比如,当 点击 message01 后的 push ,MessageDetails 显示 message01的详情,再点击 message02 后的 push ,MessageDetails 显示 message02 后的详情,

     然后点击后退,会退回到 message01

     然而,

     当 点击 message01 后的 push ,MessageDetails 显示 message01的详情,再点击 message02 后的 replace ,MessageDetails 显示 message02 后的详情,

     然后点击后退,不会退回到 message01,而是退回到 messages(地址栏上), 因为 message01 取代了 message01 的路由历史。

    3,  前进

      history中的 goForward() 方法

    4,后退

      history 中的 foBack() 方法

    另外我们要注意路由跳转不会发送请求,非路由跳转会发送请求,

    其中,页面跳转就属于非路由跳转,使用 window.location 方法实现

     1 import React, { Component } from 'react'
     2 import {NavLink,Route} from 'react-router-dom'
     3 
     4 
     5 import MessagesDetails from '../messagesdetails/messagesdetails'
     6 
     7 export default class Messages extends Component {
     8     state={
     9         messagesArr:[]
    10     }
    11     componentDidMount(){
    12         let {messagesArr}=this.state;
    13         messagesArr = [
    14             { id: 1, title: 'message01', content: '你好,message01'},
    15             { id: 2, title: 'message02', content: '你好,message02'},
    16             { id: 3, title: 'message03', content: '你好,message03'}]
    17         this.setState({messagesArr})
    18     }
    19     
    20     //push
    21     showDetails1=(id)=>{
    22         this.props.history.push(`/home/messages/messagesdetails/${id}`);
    23     }
    24 
    25     //replace
    26     showDetails2 = (id) => {
    27         this.props.history.replace(`/home/messages/messagesdetails/${id}`);
    28     }
    29 
    30     //前进
    31     forward=()=>{
    32         this.props.history.goForward();
    33     }
    34 
    35     //后退
    36     back=()=>{
    37         this.props.history.goBack();
    38     }
    39 
    40     //页面跳转
    41     goBaidu=()=>{
    42         window.location="http://www.baidu.com";
    43     }
    44 
    45     render() {
    46         const {messagesArr}=this.state;
    47         return (
    48             <div>
    49                 <ul >
    50                     {
    51                         messagesArr.map((message, index) => 
    52                         <li key={index}>
    53                             <NavLink to={`/home/messages/messagesdetails/${message.id}`}>{message.title}</NavLink>
    54                             &nbsp;&nbsp;<button onClick={() => { this.showDetails1(message.id)}}>push</button>
    55                             &nbsp;&nbsp;<button onClick={() => { this.showDetails2(message.id)}}>replace</button>
    56                         </li>
    57                         )
    58                     }
    59                 </ul>
    60                  &nbsp;&nbsp;<button onClick={this.forward}>前进</button>
    61                  &nbsp;&nbsp;<button onClick={this.back}>后退</button>
    62                  &nbsp;&nbsp;<button onClick={this.goBaidu}>页面跳转</button>
    63                 <Route path="/home/messages/messagesdetails/:id" component={MessagesDetails} />
    64             </div>
    65         )
    66     }
    67 }

    这里还需要注意的是:

    showDetails1 和 showDetails2 这两个方法,我们需要接收参数,而在 button 中,使用 this.showDetails 是无法传递参数的,所以我们使用

    <button  onClick={ ( ) => { this.showDetails( message.id )  } } ></button> 的方式传递参数,是一种让回调函数传递参数的办法。

  • 相关阅读:
    【C#】Send data between applications
    【C#】Switch datatype between object and byte[]
    【C#】Get the html code of a webpage
    MSIL Hello World
    MonoGame 3.2 下,截屏与 Texture2D 的保存
    mciSendString 的两个小坑
    virtual 修饰符与继承对析构函数的影响(C++)
    让 OpenAL 也支持 S16 Planar(辅以 FFmpeg)
    博客园第一篇——SDL2+FFmpeg 制作简单播放器&同步
    第五次UML作业——结对作业二:班级成绩表
  • 原文地址:https://www.cnblogs.com/shanlu0000/p/12514229.html
Copyright © 2011-2022 走看看