关于react-router点击Link后url刷新,但是页面无法刷新的问题

一点废话(原来写的没有出错的router,解决方案直接到解决问题)

每次写代码和学习总是遇到各种问题,一直没有记录的习惯,以后还是要记录一下。
原来写过一个和react相关的项目,路由这一块是其他同学写的,直接单独写了一个router.js直接渲染到index.js的div上,所以全程都没有什么问题。后来有做一个后台管理系统,主要使用AntDesign的Menu组件,将所有的路由都写在了一个页面,也没有遇到什么问题。
1.单独写了一个router.js的大概代码

import React, {Component} from 'react';
import { BrowserRouter as Router, Route, Switch, Redirect } from 'react-router-dom';
import HomePage from './HomePage';
class Root extends Component {
  render() {
    return (
      <Router>
        <Switch>
          <Route path='/home' component={HomePage} />
          <Redirect from='/' to='/home'></Redirect>
        </Switch>
      </Router>
    );
  }
}
export default Root;

2.使用AntDesign的Menu组件

import React, { Component } from 'react';
import { Layout, Menu, Icon } from 'antd';
import { BrowserRouter as Router, Route, Link } from 'react-router-dom'
import AddInformations from './AddInformations'
class Administ extends Component {
  render() {
    return (
      <Router>
        <Layout style={{ minHeight: '100vh' }}>
        {/*sider和Menu的代码,此处省略,使用Link进行跳转*/}
          <Layout>
            <Header style={{ background: '#fff', padding: 0 }} />
            <Content style={{ margin: '0 16px' }}>
              <Route path="/administ/addinformations" component={AddInformations} />
               {/*Route列表*/}
            </Content>
          </Layout>
        </Layout>
      </Router>
    );
  }
}
export default Administ;

问题由来

今天在做一个管理系统的时候,准备使用AntDesign的Menu组件来写,主要想实现的功能是点击Menu组件中的选项,右边的Content中就换上不同的页面(组件),其实和上面一节中2的功能是一样的,但是因为管理系统,子页面比较多,为了避免搞混,所以把所有的routerc抽出来单独写一个组件。但是问题来了,我点击Link的时候,url发生了改变,但是Content中的内容并没有更新。而是要等刷新之后再更新-0-
在这里插入图片描述

参考博客

https://blog.csdn.net/tongshuo_11/article/details/78528969
https://www.cnblogs.com/jlj9520/p/10601195.html

解决问题

通过百度各种,加自己瞎猫碰死耗子(基础还是漏了不少东西鸭)。
切换路由的时候,页面组件不重新构建,页面也不刷新。(来自参考博客1,但是代码稍微没看懂)
后百度如何让页面组件重新构建,在参考博客2中找到(可以使用组件中的 key 值设置,给对应需要更新的组件设置一个 key 属性,key只要是唯一的即可,这样每次这个key值不一样就能更新。)
问题成功解决:
因为是antDesign的Menu组件,所以Menu有个selectedKeys这个属性表示当前选中的菜单项 key 数组。那么,只要把这个值传递给写Router的子组件的key值就完美了。
将selectedKeys和state中的current绑定,然后假设把路由都写在RouterList 中,那么调用的时候就不直接写成

<RouterList/> 

而是传递一个key值给它就好

 <RouterList key={this.state.current}/>
  {/*这样就可以完美的实现更新了,/RouterList 是写Router的子组件的名字*/}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值