[React] 15.React - React中的前端路由

news/2024/7/15 17:16:27 标签: 前端, react.js

一. url是什么:访问不同url, 展示不同的组件
二. 使用步骤:

  1. 安装React路由:命令行中执行npm install react-router-dom --save(注意此处的版本为npm install react-router-dom@4.3.1 --save)
  2. 两个js文件,分别为list.js和newButton.js,要实现访问localhost:3000/button的时候就显示button.js;访问localhost:3000/list的时候就显示list.js。代码如下:
    list.js
import React, {Component} from "react";

import {List} from 'antd';

const data = [
    'aaa',
    'bbb',
    'ccc',
    'ddd'
]
class List extends Component {
    render() {
        return (
            <List style={{marginLeft: 20,
            marginTop: 20,
            marginRight: 20}}
            header={<div>Header</div>}
            footer={<div>Footer</div>}
            bordered
            dataSource={data}
            renderItem={item=>(<List.Item>{item}</List.Item>)}
            />
        )
    }
}

export default List

newButton.js

import React, {Component} from "react";

import {List} from 'antd';

const data = [
    'aaa',
    'bbb',
    'ccc',
    'ddd'
]
class NewList extends Component {
    render() {
        return (
            <List style={{marginLeft: 20,
            marginTop: 20,
            marginRight: 20}}
            header={<div>Header</div>}
            footer={<div>Footer</div>}
            bordered
            dataSource={data}
            renderItem={item=>(<List.Item>{item}</List.Item>)}
            />
        )
    }
}

export default NewList
  1. 在index.js中使用router
    1)引入路由:import { BrowserRouter, Route, Link } from 'react-router-dom';
    2)渲染BrowserRouter组件,其中包含一条条的路由
class Entry extends Component {
    render() {
        return (
            <BrowserRouter>
            <div>
            <Route path='/list' component={NewList}/>
            <Route path='/button' component={NewButton}/>
            </div>
            </BrowserRouter>
        )
    }
}

3)浏览器中输入localhost:3000后,什么后没显示出来,因为此时没有匹配的路由
在这里插入图片描述
4)根据路由的配置,浏览器中输入:localhost:3000/list就会显示newList组件
输入:localhost:3000/button就会显示newButton组件
在这里插入图片描述
在这里插入图片描述
注:BrowserRoute表示定义一个路由,Route表示一个路由项,
5)如想通过点击newButton里的按钮后跳转到列表页,需要用到Link(使用React路由后,就不能使用a标签进行页面跳转,需要借助Link标签完成路由的跳转)
步骤:在newButton中引入Link后用Link标签跳转
newButton.js

import React, {Component, Fragment} from "react";
import { Link } from "react-router-dom";

import {Button} from 'antd';

class NewButton extends Component {
    render() {
        return (
            <Link to='/list'>
                <Button type="primary">按钮</Button>
            </Link>
            
        )
    }
}

export default NewButton;

6)跳转页面的过程中,携带参数,如何获取参数,如

class NewButton extends Component {
    render() {
        return (
            <Link to='/list/123'>
                <Button type="primary">按钮</Button>
            </Link>
            
        )
    }
}

解决方式:在index.js配置路由部分,给list地址后加一个变量,表示传过来的值为变量id的值

<Route path='/list/:id' component={NewList}/>

之后在newList组件中打印出console.log(this.props)
在这里插入图片描述
可看到params里有变量id的值为123

完整代码如下:
index.js中

import React, {Component}from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter, Route } from 'react-router-dom';
import 'antd/dist/antd.css';
import NewList from './newList'
import NewButton from './newButton'

class Entry extends Component {
    render() {
        return (
            <BrowserRouter>
            <div>
            <Route path='/list/:id' component={NewList}/>
            <Route path='/button' component={NewButton}/>
            </div>
            </BrowserRouter>
        )
    }
}

// 将内容挂载到页面上
ReactDOM.render(<Entry />, document.getElementById('root'));

newList.js中

import React, {Component} from "react";

import {List} from 'antd';

const data = [
    'aaa',
    'bbb',
    'ccc',
    'ddd'
]
class NewList extends Component {
    render() {
        console.log(this.props)
        return (
            <List style={{marginLeft: 20,
            marginTop: 20,
            marginRight: 20}}
            header={<div>Header</div>}
            footer={<div>Footer</div>}
            bordered
            dataSource={data}
            renderItem={item=>(<List.Item>{item}</List.Item>)}
            />
        )
    }
}

export default NewList

newButton.js中

import React, {Component} from "react";
import { Link } from "react-router-dom";

import {Button} from 'antd';

class NewButton extends Component {
    render() {
        return (
            <Link to='/list/123'>
                <Button type="primary">按钮</Button>
            </Link>
            
        )
    }
}

export default NewButton;

http://www.niftyadmin.cn/n/1440512.html

相关文章

day8作业

一、实现用户注册功能思路&#xff1a; 用户输入用户名、密码 将用户输入的内容按照固定的格式&#xff0c;比如&#xff1a;egon:123&#xff0c;存入文件 可以往一个文件中重复注册新的用户名和密码 附加&#xff1a; 1、对输入的用户名进行合法性监测&…

预防分布式拒绝服务攻击的十项策略(转)

本文是由编写分布式拒绝服务攻击工具TFN和TFN2K&#xff08;这些工具曾被用于攻击Yahoo等大型网站&#xff09;的德国著名黑客Mixter&#xff08;年仅20岁&#xff09;提供。 简单地说&#xff0c;掌握所有可能导致被入侵和被用于实施拒绝服务攻击的原因和安全漏洞是非常复杂的…

Learning-Python【9】:Python文件操作

1、什么是文件 文件是操作系统提供给用户或应用程序的一种虚拟单位&#xff0c;该虚拟单位直接映射的是硬盘空间。通俗点说&#xff0c;文件就是存放数据的地方 2、为何要处理文件 用户或应用程序直接操作文件&#xff08;读/写&#xff09;就被操作系统转换成具体的硬盘操作&a…

玩Windows系统工具 就是这么简单(转)

Windows 2000/XP操作系统中附带了许多实用的工具&#xff0c;但这些工具大多分布在各个角落&#xff0c;使用时通常需要经过几个步骤的操作&#xff0c;有些甚至需要在“开始→运行”中手工输入命令&#xff0c;使用起来很不方便具。此时&#xff0c;我们不妨试一试这款名为XP …

[Vue] 1.用VUE写hello world和counter

一、用Vue写Hello world 新建一个文件夹 Hello world; 新建一个文件: index.html在html的 完整代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible&q…

【概率论】4-4:距(Moments)

title: 【概率论】4-4:距(Moments) categories: - Mathematic - Probability keywords: - Moments - Moments Generating Function toc: true date: 2018-03-25 10:58:47 Abstract: 本文介绍另一个基于期望的随机变量分布的数字特征——“矩” &#xff08;不知道咋翻译的&…

[Vue] 2. 字符串反转和内容隐藏 v-if

一、字符串反转&#xff1a;实现点击按钮后&#xff0c;字符串反过来显示 写按钮&#xff0c;并绑定事件方法&#xff1a;v-on&#xff08;绑定一个事件&#xff09;&#xff1a;click&#xff08;绑定的是click事件&#xff09; <button v-on::click"handleBtnClick…

JVM-Java内存模型 重排序、顺序一致性、volatile、锁、final

成神之路 第002期 JVM-Java内存模型并发编程模型的分类 线程通信机制 共享内存&#xff08;Java采用&#xff09; 通过主内存和线程公共内存之间的信息同步来实现隐式通信线程之间共享程序的公共状态&#xff0c;线程之间通过写-读内存中的公共状态来隐式进行通信。消息机制 线…