0

0

通过一个用户管理实例学习react-router-dom

一个新手

一个新手

发布时间:2017-10-12 09:34:49

|

1676人浏览过

|

来源于php中文网

原创

我们通过一个用户管理实例来学习react-router-dom

这个实例包括9个小组件

App.js 引入组件

Home.js 首页组件

User.js 用户管理组件

  -  UserList.js 用户列表组件

  -  UserAdd.js 用户添加组件

  - UserDetail.js  用户详情组件

Profile.js 个人中心组件

Login.js  用户登录组件

Protected.js 处理登录的组件(我们模拟登录的)

我们先建立一个App组件,作为我们项目引入的组件

import React, {Component} from 'react';//Router 容器,它是用来包裹路由规则的//Route 是路由规则//BrowserRouter基于h5的。兼容性不好//引入react-router-demoimport {HashRouter as Router, Route,Link,NavLink,Switch} from 'react-router-dom';//引入我们需要的组件import Home from "./Home";
import User from "./User";
import Profile from "./Profile";
import Login from "./Login";
import Protected from './Protected'//定义一个App组件export default class App extends Component {
    render() {        //定义一个我们选中的状态
        let activeStyle={color:'red'}        return (            
                

{/*Switch是匹配*/} {/*exact 我们匹配/斜杠时候,就匹配第一个*/}

) } }

App组件使我们引入的组件,在这个组件里面,我们需要注意到最外层的Router

这个是路由容器,我们路由规则Route需要包裹在日期里面

Route包含了两个属性,path 和 component

path指向的路由路径,component指向的是要跳转的组件

我们路由导航,一般是Link和NavLink两个

这两个功能一样,都是路由跳转,但是NavLink有一个属性用来显示跳转选中的样式,activeStyle属性,写显示高亮样式的,接收一个对象{}

在我们路由导航有一个to属性

to属性是我们路由的要跳转的路径

Linux+PHP+MySQL案例教程
Linux+PHP+MySQL案例教程

本书以培养高级网站建设与管理人才为目标,内容循序渐进,由浅入深,通过大量的实例系统全面地介绍了Linux+PHP+MySQL环境下的网络后台开发技术。本书详尽分析了近30个典型案例。包括计数器、网站流量统计、留言板、论坛系统、聊天室、投票与调查、用户管理、新闻发布系统、广告轮播、购物系统等等,力求让读者通过对案例的学习,轻松掌握PHP和MySQL的编程精要,迅速掌握网络后台开发技巧。   本书适

下载

下面是User.js 组件,主要包含两个路由NavLink和Route,和上面一个意思,切换两个组件NavLink和Route

import React, {Component} from 'react'import {Link,Route,NavLink} from 'react-router-dom'import UsersList from './UsersList'import UsersAdd from './UsersAdd'import UserDetail from "./UserDetail";
export default class User extends Component {
    render() {
        let activeStyle={color:'red'}        return (            

) } }

  -  UserAdd.js 用户添加组件

import React, {Component} from 'react'export default class UsersAdd extends Component {
    handleSubmit=()=>{
        let username=this.refs.username.value;
        let password=this.refs.password.value;
        let user={username,password,id:Date.now()};
        let users=JSON.parse(localStorage.getItem('USERS')||"[]");
        users.push(user);
        localStorage.setItem('USERS',JSON.stringify(users));        this.props.history.push('/user/list')
    }
    render() {        /*
        * history 用来跳转页面
        * location.pathname 用来存放当前路径
        * match代表匹配的结果
        *
        * */
        return (            

) } }

我们将用户添进去的数据,在页面缓存,方便我们用户列表页渲染

localStorage.setItem('USERS',JSON.stringify(users));
缓存完成后跳转到列表详情页面userList
this.props.history.push('/user/list')

 -  UserList.js 用户列表组件

import React, {Component} from 'react'import {Link} from 'react-router-dom'export default class UsersList extends Component {
    constructor(){
        super();        
        this.state={users:[]}
    }
    componentWillMount(){
        let users = JSON.parse(localStorage.getItem('USERS') || "[]");        
        this.setState({users});
    }
    render(){        
    return (           
    
    { this.state.users.map((user,index)=>(
  • 用户名: {user.username} { let users=this.state.users.filter(item=>item.id!=user.id) this.setState({users}); }}>删除
  • )) }
) } }

componentWillMount()是组件挂载完成后的组件周期函数

在这个钩子函数里面,我们去userAdd存储的USERS数据,然后渲染到页面上去
{user.username}

这里面我们跳转到个人信息详情里面,把每个人的用户id带上

然后我们用户详情页面UserDetail.js 组件

import React, {Component} from 'react'export default class UserDetail extends Component {
    render() {        // let user=this.props.location.state.user
        let users = JSON.parse(localStorage.getItem('USERS')||"[]");
        let id = this.props.match.params.id;
        let user = users.find(item=>item.id == id);        
        return (            
        
ID 用户名 密码
{user.id} {user.username} {user.password}
) } }

let id = this.props.match.params.id;

let user = users.find(item=>item.id == id);

通过match里面获取到路由带过来的id

然后判断users里面id相同的那一项

然后渲染到页面上去

,然后我们判断登录,如果没有登录,就去登录,登录后才能看用户管理

import React from 'react';
import {Route, Redirect} from 'react-router-dom';//函数组件//把属性对象中的Component属性取出来赋给comp,把其它属性取出来赋给other对象//再把other对象的全部属性取出来赋给Route// component=组件// render函数 当路由匹配的时候,渲染的是render方法的返回值export default function ({component: _comp, ...rest}) {    return  localStorage.getItem('login') ? <_comp/> :
            
    }/>    return null;
}

如果没有登录,我们就进入登录组件,其实我们模拟登录就是设置了一个缓存login为true,模拟权限,真实项目中,我们通过后台接口来限制,路由跳转

import React, {Component} from 'react';
export default class Login extends Component {
    handleClick = ()=>{
        localStorage.setItem('login','true');
        console.log(this.props);        
        this.props.history.push(this.props.location.state.from);
    }
    render() {        
    return (            
    

) } }

 后面,我们首页Hone和Profile两个组件,基本就是展示个人信息的,就是渲染,所以我就没有必要写了!

总体完成,路由嵌套路由,然后通过路由参数分辨路由不同的信息

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

32

2026.01.31

go语言 math包
go语言 math包

本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

23

2026.01.31

go语言输入函数
go语言输入函数

本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

16

2026.01.31

golang 循环遍历
golang 循环遍历

本专题整合了golang循环遍历相关教程,阅读专题下面的文章了解更多详细内容。

5

2026.01.31

Golang人工智能合集
Golang人工智能合集

本专题整合了Golang人工智能相关内容,阅读专题下面的文章了解更多详细内容。

6

2026.01.31

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

268

2026.01.31

高干文在线阅读网站大全
高干文在线阅读网站大全

汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

195

2026.01.31

无需付费的漫画app大全
无需付费的漫画app大全

想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

170

2026.01.31

漫画免费在线观看地址大全
漫画免费在线观看地址大全

想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

85

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 10万人学习

CSS3 教程
CSS3 教程

共18课时 | 5.1万人学习

Rust 教程
Rust 教程

共28课时 | 5.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号