热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

安装路由的环境

import{BrowserRouterasRouter}fromreact-router-dom3.两种模式(hash模式,历史纪录模式)hash模式:后面带

import{BrowserRouter as Router} from "react-router-dom"
3.两种模式(hash模式,历史纪录模式)
hash模式:后面带#号的 HashRouter
拿到#号后面的值:location.hash
历史纪录模式: BrowserRouter(原理,window.history.State)
import {BroswerRouter as Router} from "react-router-dom"
4.使用 Router App/ /router 将其包起来,通过context传到他下面的所有子孙组件里面
5.引图片(public可以直接引入,不需要require,src下面的图片再用require)
6.引入sass
yarn add node-sass sass-loader
7.阿里矢量图标库如何使用:
font放在public,在public里面的index.html下面引入iconfont.css
8、移动端适配
html{font-size:13.33333vw}
body{font-size:14px}
1. Route path="/路径" compOnent={组件名} /Route
2.NavLink带样式:点击后会出现active的class类名(在index.js里面设置css样式)
Link不带样式
3.路由切换组件三个属性
history 编程式导航
location(search,state)
match (params)
exact精确匹配
Redirect from="/" to="/one" exact /Redirect
引入redirect(重定向)

Route compOnent={}
但是此时404页面会出现在所有页面,,解决办法是引入Switch,同时要将Route404这个组件写在最下面

轮播(只有当数据请求到了之后,财经数据发送过去,所以此处做了一个三元运算符进行判断)
实例代码:

请求数据的组件:
import React, { Component } from 'react'
import MySwiper from "../myswiper"
export default class Test2 extends Component {
constructor(props){
super(props)
this.state ={
list:[]
//这个组件的做用就是异步拿到数据,传给子组件
componentDidMount(){
this.getData()
getData(){
fetch("http://localhost:4000/list").then((res)= res.json()).then((res)= {
this.setState({
list:res
render() {
return (
div
test2
{this.state.list.length 0?
MySwiper list={this.state.list} / :""}
/div

lunbo:

import React, { Component } from 'react'
import Swiper from 'swiper'
import "swiper/css/swiper.css"
export default class Test extends Component {
constructor(props){
super(props)
this.state ={
list:[]
componentDidMount(){
this.getData()
// new Swiper ('.swiper-container', {//如果内容是静态的,可以这样做
// loop: true, // 循环模式选项
// // 如果需要分页器
// pagination: {
// el: '.swiper-pagination',
// }
// })
componentDidUpdate(){
//说明数据变化了,异步数据回来
new Swiper ('.swiper-container', {
loop: true, // 循环模式选项
// 如果需要分页器
pagination: {
el: '.swiper-pagination',
getData(){
fetch("http://localhost:4000/list").then((res)= res.json()).then((res)= {
this.setState({
list:res
render() {
return (
div
{this.state.list.length}
div className="swiper-container"
div className="swiper-wrapper"
this.state.list.map((item)= {
return div className="swiper-slide" key={item.bannerId}
{item.name}
/div
/div
div className="swiper-pagination" /div
/div
/div

}

withRouter(在路由组件传值时一定要引入withRouter)

监控路由的变化,默认情况下必须经过路由匹配渲染的组件才存在this.props,才拥有路由参数,执行this.props.history.push('/detail')跳转到对应路由的页面,然而不是所有组件都直接与路由相连(通过路由跳转到此组件)的,当这些组件需要路由参数时,使用withRouter就可以给此组件传入路由参数,将react-router的history、location、match三个对象传入props对象上,此时就可以使用this.props。
引入:import{withRouter} from “react-router-dom”
导出:export default withRouter(App);
解决刷新出现react的默认标题栏
刷新时调用一次 在constructon里有调用了一此函数,将this.props.location.pathname传入,就不会刷新产生react
当引入withRouter后就会出现三个参数,location,match,history

监控路由参数的变化(路由传参)

:type传参
取得参数:this.props.match.params.type

useState(新特性) hook

let [a,setA] = userState(1)初始值赋值给a
前面的两个参数为自定义的
let [数据,修改数据的函数] = useState('可以传默认值')

编程式导航:this.props.history.push listen go ...适合做编程式导航和及监听路由的变化("/list/"+type)
match 主要是用于取路由的参数 this.props.match.params.参数
location location.pathname 还能查询location.search 就是?号后面的参数,查询字符串
###qs包
qs这个包可以将这个参数(查询字符串)拆分,?a=xxx b=xxx
import qs from "queryString" 引入包
location.search.slice(1)去问号
qs.parse(location.search.slice(1)) {a:xxx,b:yyyy}
location.state 可以传递多个值 console.log(this.props.location.state)

无状态组件的路由传值(第一种方法)

组件1:
div className="App"
NavLink to="/list/users" users /NavLink
NavLink to="/list/goods" goods /NavLink
Route path="/list/:type" compOnent={List} /Route
/div
1.此时在componentDidMount打印this.props 会出现三个参数(match,history,location)
2.使用match里面的this.props.match.params.type拿到变化的路由参数
3.在state中设置参数和数据的初始值
this.state={list:[],type=""}
4.在componentDidMount(){}在组件加载的时候请求数据,分别调用getData方法,只走一次
5.在componentDidUpdate(){}在组件变化时监听路由变化,监听变化
6.因为在componentDidUpdate中监听了路由的变化,并调用了getdata方法修好改了type值,
#####所以一定要判断一下两次切换的路由的值不相等,否侧会不停的请求数据
7.在setState中一定要修改type值否则数据无法切换,值无法拿到无状态组件的路由传值的第二种方法

function App(props) {
console.log(props)
return (
div className="App"
//第一种方法:
{/* NavLink to="/list/users" users /NavLink
NavLink to="/list/goods" goods /NavLink */}
//第二种方法:
button ()= {props.history.push("/list/user")}} user /button
button ()= {props.history.push("/list/goods")}} goods /button
Route path="/list/:type" compOnent={List} /Route
/div

类组件

​ 第一种方法image-20200218215942523

第二种方法

image-20200218221013315

接收的组件使用:

console.log(this.props.match.params.type)
1、NavLink activeClassName 可以指定当前路由的类名
2、 this.props.history.push(“/list”,{type})
第二个组件console.log(this.props.location.state.type)
params 默认值 是一个{} state的默认值是undefined
state传值(传多个值),params传值,(一个参数)
NavLink Link 除了可以 to=“字符串”,还可以写对象to={{pathName:’/list’}}
所以此时做判断
if(!this.props.location.state.type) return

权限路由:

Route path="/two" render={(props)= {return sessionStorage.getItem('user')? Two {...props}/ : Redirect to="/login" }} /Route
​ redirect组件 to属性可以传值
​ to={{pathname:’/login},state:{key:value}}

文章来源于https://www.cnblogs.com/cc0419/p/12546683.html


推荐阅读
  • 单页面应用 VS 多页面应用的区别和适用场景
    本文主要介绍了单页面应用(SPA)和多页面应用(MPA)的区别和适用场景。单页面应用只有一个主页面,所有内容都包含在主页面中,页面切换快但需要做相关的调优;多页面应用有多个独立的页面,每个页面都要加载相关资源,页面切换慢但适用于对SEO要求较高的应用。文章还提到了两者在资源加载、过渡动画、路由模式和数据传递方面的差异。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • 如何优化Webpack打包后的代码分割
    本文介绍了如何通过优化Webpack的代码分割来减小打包后的文件大小。主要包括拆分业务逻辑代码和引入第三方包的代码、配置Webpack插件、异步代码的处理、代码分割重命名、配置vendors和cacheGroups等方面的内容。通过合理配置和优化,可以有效减小打包后的文件大小,提高应用的加载速度。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • 如何基于ggplot2构建相关系数矩阵热图以及一个友情故事
    本文介绍了如何在rstudio中安装ggplot2,并使用ggplot2构建相关系数矩阵热图。同时,通过一个友情故事,讲述了真爱难觅的故事背后的数据量化和皮尔逊相关系数的概念。故事中的小伙伴们在本科时参加各种考试,其中有些沉迷网络游戏,有些热爱体育,通过他们的故事,展示了不同兴趣和特长对学习和成绩的影响。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • JavaScript和HTML之间的交互是经由过程事宜完成的。事宜:文档或浏览器窗口中发作的一些特定的交互霎时。能够运用侦听器(或处置惩罚递次来预订事宜),以便事宜发作时实行相应的 ... [详细]
author-avatar
排骨冬菇面
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有