当前位置: 首页 > news >正文

react 动态修改路由_关于React动态加载路由处理的相关问题

前言

相信很多人都遇到过想在React项目中动态加载路由这种问题,接下来我们逐步实现。

引入必要的依赖

import React from 'react'

import { Router, Route, IndexRoute, hashHistory } from 'react-router'

接下来创建一个component函数

目的就是为了变为router的component实现异步加载。

// 异步按需加载component

function asyncComponent(getComponent) {

return class AsyncComponent extends React.Component {

static Component = null;

state = { Component: AsyncComponent.Component };

componentDidMount() {

if (!this.state.Component) {

getComponent().then(({default: Component}) => {

AsyncComponent.Component = Component

this.setState({ Component })

})

}

}

//组件将被卸载

componentWillUnmount(){

//重写组件的setState方法,直接返回空

this.setState = (state,callback)=>{

return;

};

}

render() {

const { Component } = this.state

if (Component) {

return

}

return null

}

}

}

在此说明componentWillUnmount钩子是为了解决Can only update a mounted or mounting component的这个问题,原因是当离开页面以后,组件已经被卸载,执行setState时无法找到渲染组件。

接下来实现本地文件路径的传入

function load(component) {

return import(`./routes/${component}`)

}

将已知地址路径传递到一个函数并把这个函数作为参数传递到 asyncComponent中这样asyncComponent就能接收到这个路由的地址了,然后我们要做的就是将这个asyncComponent函数带入到router中。

未定义
}/>

{children}
}>

load('GlobalNotification/CustomerWorkAssistantTodo/CustomerAgencyMatter'))}/>

load('GlobalNotification/CustomerWorkAssistantTodo/CustomerAlreadyMatter'))}/>

load('GlobalNotification/SystemMessage/SystemMessage'))}/>

load('GlobalNotification/SystemMessage/SystemMessagePer'))}/>

从代码中可以看出已经实现了router 的component 的引入,这样自然就可以通过一个循环来实现动态的加载啦!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章:

  • C#中值和引用
  • pythonrestapicctv_使用pythonrestapi在JIRA中创建问题和自定义字段
  • 第1章 基础语法
  • 苹果动态壁纸库怎么增加_苹果xr如何添加动态壁纸设置
  • 【Selenium-WebDriver问题点】driver和浏览器版本之间的兼容性问题
  • 知识图谱标准化白皮书_知识图谱标准化白皮书正式发布
  • 数据库系统工程师5天修炼_中级|通信工程师每日一练|3.4
  • windows下redis配置密码
  • netlink怎么读_如何使用VB访问NETLINK并读写S7300 PLC数据
  • vue点击单个图片放大
  • python如何安装tushare_Python tusharec包_程序模块 - PyPI - Python中文网
  • java实现ssl单/双向认证通信[推荐]
  • js添加多个子节点_JavaScript-js 动态创建多个元素如何避免多次追加到节点的操作?...
  • [BZOJ 1040] 骑士
  • mongodb的python访问_python 连接mongodb 使用
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • @angular/forms 源码解析之双向绑定
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • GraphQL学习过程应该是这样的
  • leetcode-27. Remove Element
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • passportjs 源码分析
  • Promise面试题2实现异步串行执行
  • Python学习之路16-使用API
  • Spring Boot快速入门(一):Hello Spring Boot
  • 初探 Vue 生命周期和钩子函数
  • 番外篇1:在Windows环境下安装JDK
  • 翻译--Thinking in React
  • 简单数学运算程序(不定期更新)
  • 如何设计一个比特币钱包服务
  • 树莓派 - 使用须知
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 由插件封装引出的一丢丢思考
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​2021半年盘点,不想你错过的重磅新书
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #Z0458. 树的中心2
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (3)llvm ir转换过程
  • (5)STL算法之复制
  • (9)目标检测_SSD的原理
  • (八十八)VFL语言初步 - 实现布局
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (一)基于IDEA的JAVA基础12
  • (转)Sublime Text3配置Lua运行环境
  • .htaccess配置常用技巧
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .Net Winform开发笔记(一)
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题