React函数组件路由和组件

Cadence Allegro通过手工绘制板框的方法 Cadence Allegro通过手工绘制板框的方法 Cadence Allegro绘制板框有三个方法: 1、通过手工绘制板框; 2、通过向导绘制板框; 3、通过导入DXF文件导绘制板框; 本章将教会大家如何通过手工的方法绘制100mm的矩形板框。 方法步骤如下: 一、通过放置绘图工具2D线绘制; 1、运行Cadence Allegro软件,打开File菜单栏,选择New。 2、这时软件会弹出Ne... 阅读详情

路由

当应用变得复杂的时候,就需要分块的进行处理和展示,传统模式下,我们是把整个应用分成了多个页面,然后通过 URL 进行连接。但是这种方式也有一些问题,每次切换页面都需要重新发送所有请求和渲染整个页面,不止性能上会有影响,同时也会导致整个 JavaScript 重新执行,丢失状态。

SPA

Single Page Application : 单页面应用,整个应用只加载一个页面(入口页面),后续在与用户的交互过程中,通过 DOM 操作在这个单页上动态生成结构和内容

优点:

​ 1.有更好的用户体验(减少请求和渲染和页面跳转产生的等待和空白),页面切换快;

​ 2.重前端,数据和页面内容由异步请求(ajax+dom)操作来完成,前端处理更多的业务逻辑

缺点:

​ 1.首次进入处理慢;(可以通过按需加载解决这个问题)

​ 2.不利于SEO(SEO是搜索引擎(百度,谷歌)优化)

SPA的切换机制

虽然 SPA 的内容都是在一个页面通过 JavaScript 动态处理的,但是还是需要根据需求在不同的情况下分内容展示,如果仅仅只是依靠 JavaScript 内部机制去判断,逻辑会变得过于复杂,通过把 JavaScript 与 URL 进行结合的方式:JavaScript 根据 URL 的变化,来处理不同的逻辑,交互过程中只需要改变 URL 即可。这样把不同 URL 与 JavaScript 对应的逻辑进行关联的方式就是路由,其本质上与后端路由的思想是一样的。

简单来说,就是操作url,通过改变url,依次来改变,我们写好逻辑,监控url的改变就可以,这样把url和javascript逻辑产生关联就是路由,本质思想和后端一样;

前端路由

前端路由只是改变了 URL 或 URL 中的某一部分,但一定不会直接发送请求,可以认为仅仅只是改变了浏览器地址栏上的 URL 而已,JavaScript 通过各种手段处理这种 URL 的变化,然后通过 DOM 操作动态的改变当前页面的结构

  • URL 的变化不会直接发送 HTTP 请求业务;
  • 逻辑由前端 JavaScript 来完成

目前前端路由主要的模式:

  • 基于 URL Hash 的路由
  • 基于 HTML5 History API 的路由
    https://developer.mozilla.org/zh-CN/docs/Web/API/History_API

React Router

​ https://reacttraining.com/react-router/

React Router 提供了多种不同环境下的路由库

  • web
  • native

安装

npm i -S react-router-dom

组件

BrowserRouter 组件

​ 基于 HTML5 History API 的路由组件

​ BrowserRouter:地址栏没有

HashRouter 组件

基于 URL Hash 的路由组件

​ HashRouter:地址栏有#

Route 组件

​ 通过该组件来设置应用单个路由信息,Route 组件所在的区域就是就是当 URL 与当前 Route 设置的 path 属性匹配的时候,后面 component 将要显示的区域

创建两个组件

view/index.js

import React from 'react';
export default function IndexPage(){
    return <h1>关于我们</h1>
}

view/about.js

import React from 'react';
export default function AboutPage(){
    return <h1>关于我们111</h1>
}

App.js

import React from 'react';
import {Route} from 'react-router-dom';
import IndexPage from './view/index';
import AboutPage from './view/about';

function App() {
  return (
    <div className="App">
      <Route path='/' component={IndexPage}/>
      <Route path='/about' component={AboutPage}/>
    </div>
  );
}

export default App;

注意:path是路径 component:写组件名

主入口文件index.js

index.js

import React from 'react';
import ReactDOM from 'react-dom';
// import {HashRouter} from 'react-router-dom'
import {BrowserRouter} from 'react-router-dom'
import './index.css';
import App from './App';


ReactDOM.render(
  // <HashRouter>
  //   <App />
  // </HashRouter>,
  <BrowserRouter>
  <App />
</BrowserRouter>,
  document.getElementById('root')
);

重点注意:必须在主入口文件引入HashRouter或者BrowserRouter

这样引入多个组件会出现问题

因为:path : 匹配url的方式不是相等,而是以指定的url开头只要符合的都会输出出来;

exact

exact 属性表示路由使用 精确匹配模式,非 exact 模式下 ‘/’ 匹配所有以 ‘/’ 开头的路由

在Route标签里加上exact他会精确查找

App.js

import React from 'react';
import {Route} from 'react-router-dom';
import IndexPage from './view/index';
import AboutPage from './view/about';
import AboutMorePage from './view/aboutMore';


//path : 匹配url的方式不是相等,而是以指定的url开头
function App() {
  return (
    <div className="App">
      <Route path='/' exact component={IndexPage}/>
      <Route path='/about' exact  component={AboutPage}/>
      <Route path='/about/more' exact component={AboutMorePage}/>
    </div>
  );
}
 
export default App;

Link组件

他解析出来就是a标签,但是他自带的阻止a标签的默认行为,改变了url由路由处理

Link 组件用来处理 a 链接 类似的功能(它会在页面中生成一个 a 标签),但设置这里需要注意的,react-router-dom 拦截了实际 a 标签的默认动作,然后根据所有使用的路由模式(Hash 或者 HTML5)来进行处理,改变了 URL,但不会发生请求,同时根据 Route 中的设置把对应的组件显示在指定的位置

to属性

​ 他是link标签的必须写的属性

​ to 属性类似 a 标签中的 href

作用

修改url

使用:

创建一个nav组件

import React from 'react';
import {Link} from'react-router-dom';

export default function Nav(){
    return (
    	<nav>
        	<Link  to='/' exact>首页</Link>
        	 <span>|</span>
        	
        	<Link  to='/about' exact>关于</Link>
        	 <span>|</span>
        
        	<Link  to='/about/more' exact>详情</Link>
        	 <span>|</span>
        
        </nav>
    )
}

传递props

<Route exact path='/' component={Home}

如果 Route 使用的是 component 来指定组件,那么不能使用 props

用Route : render

<Route exact path='/' render={() => <Home items={this.state.items} />} />

通过 render 属性来指定渲染函数,render 属性值是一个函数,当路由匹配的时候指定该函数进行渲染

App.js

import React,{useState} from 'react';
import {Route} from 'react-router-dom';
import IndexPage from './view/index';
import AboutPage from './view/about';
import AboutMorePage from './view/aboutMore';
import Nav from './components/nav'

//path : 匹配url的方式不是相等,而是以指定的url开头
function App() {
  let [user,setUser]=useState("router111");
  return (
    <div className="App">
     
      <Nav />

      <Route path='/' exact render={()=>{
        return <IndexPage user={user} setUser={setUser}/>
      }}/>
      <Route path='/about' exact  component={AboutPage}/>
      <Route path='/about/more' exact component={AboutMorePage}/>
    </div>
  );
}
 
export default App;

index.js

import React from 'react';
export default function IndexPage(props){
    console.log(props);
    let {user,setUser}=props;
    
    return <h1> <a onClick={()=>{
        setUser('React');
    }}></a>关于我们</h1>
}

使用props传递

先引入setState:

import React,{useState} from ‘react’;

接着定义:

let [user,setUser]=useState(“router111”);

在标签传参:

<Route path=’/’ exact render={()=>{
return
}}/>

在子组件接收:

export default function IndexPage(props){

console.log(props);

let {user,setUser}=props;

return

<a onClick={()=>{

​ setUser(‘React’);

}}>关于我们

}

NavLink组件

NavLink与Link类似,都是转换成a标签,但是他提供了两个特殊的属性来处理页面导航;

activeStyle

当当前的Url与NavLink中的to匹配的时候,激活activeStyle中的样式

activeClassName

他与activeStyle类似,但他激活的四clssName;

nav.js

import React from 'react';
import {NavLink} from'react-router-dom';

export default function Nav(){
    return (
        <nav>
            <NavLink to='/'
            activeClassName='active'
            exact
            activeStyle={{
                color:"cyan"
            }}
            >
                关于我们
            </NavLink>
            <span>|</span>
            <NavLink to='/about'
            activeClassName='active-about'
            exact
            >
                关于我们11
            </NavLink>
            <span>|</span>
            <NavLink to='/about/more'
            activeClassName='active-more'
            exact
            >
                详情
            </NavLink>
            <span>|</span>
           
        </nav>
    )
}

注意:他和link有类似的问题,需要用exact精准查找activeStyle,如果不加exact点完之后样式一直存在,加了点完就恢复原来样式

isActive

默认情况下,匹配的是 URL 与 to 的设置,通过 isActive 可以自定义激活逻辑,isActive 是一个函数,返回布尔值

withRouter 组件(高阶组件,高阶函数,高阶路由)

如果一个组件不是路由绑定组件,那么该组件的 props 中是没有路由相关对象的,虽然我们可以通过传参的方式传入,但是如果结构复杂,这样做会特别的繁琐。幸好,我们可以通过 withRouter 方法来注入路由对象;

简单来说:就是把一个不是路由组件加上withRouter(方法名),就会变成路由组件,并且会把参数也带过来

about.js

import React from 'react';
import Inner from'./inner';
export default function AboutPage(props){
    let {location,match}=props;
    // console.log(location);
    // console.log(match);
    return (
        <div>
            <h1>关于</h1>
            <Inner use={'哈哈哈'}/>
        </div>
    )

}

inner.js

import React from 'react';
import {withRouter} from 'react-router-dom';
 function Inner(props){
   
    console.log(props);
    return (
        <div>
            <h1>Inner   </h1>
        </div>
    )

}
export default withRouter(Inner);

Switch 组件

该组件只会渲染首个被匹配的组件

page404.js

import React from 'react';

export default function page404(){
   
    return (
        <div>
            <h1>页面飞走了</h1>
            
        </div>
    )

}

App.js

import React from 'react';
import IndexPage from './view/index';
import AboutPage from './view/about';
import {Route,Switch} from 'react-router-dom';
import Page404 from "./view/page404"
//path : 匹配url的方式不是相等,而是以指定的url开头
function App() {
  return (
    <div className='App'>
      <Switch>
      //<Page404 component={Page404}/> 
      <Route path='/'  exact component={IndexPage}/>
      <Route path='/about' exact  component={AboutPage}/>
      <Page404 component={Page404}/> 
      </Switch>
    </div>
  )
}
 
export default App;

注意:顺序问题,放在最前面输出那个路径都是渲染第一个组件

Redirect 组件

to属性:设置跳转url

​ 相当于重定向

App.js

import React from 'react';
import IndexPage from './view/index';

import { Route, Switch ,Redirect} from 'react-router-dom';
import Page404 from "./view/page404"



//path : 匹配url的方式不是相等,而是以指定的url开头
function App() {
  return (
    <div className='App'>
      <Switch>


        <Route path='/list/:hanbb' exact render={(props) => {
          return <Redirect to='/list/1'></Redirect>
        }} />
        <Page404 component={Page404} />
      </Switch>
    </div>
  )
}

export default App;

hooks (Router5.0之后出现的)

​ useHistory—获取history对象;

​ useLocation : 获取Location对象

​ useParams : 获取Params

useRouteMatch : 获取Match

import React from 'react';
import {withRouter,useHistory,useLocation,useParams} from 'react-router-dom';
 function Inner(props){
   
    console.log(props);
    console.log(useHistory());  
    console.log(useLocation());
    console.log(useParams());   //存储动态路由参数的地方
    let {goBack}=useHistory();

    return (
        <div>
            <h1>Inner   </h1>
            <button onClick={()=>{
                goBack();
            }}>按钮</button>
        </div>
    )

}
export default Inner;

路由参数

history :历史记录以及路由给我们提供的一些操作

​ history.go(-1) :后退一步

​ goBack() //返回上一步

​ goForward() //前进一步

​ push:修改当前的url,会把历史记录存起来,可以回退回去

​ replace: 修改当前的url,不会存历史记录,不能返回上一步

index.js

import React from 'react';
export default function IndexPage(props){
    console.log(props)
    let {history}=props;
    console.log(history.length)
    return (
        <div>
            <h1>首页</h1>
            <button onClick={()=>{
                // history.go(-1)
                // goBack() //返回上一步
                // goForward() //前进一步

                //history.push("url")
                // push:修改当前的url,会把历史记录存起来,可以回退回去
                // replace: 修改当前的url,不会存历史记录,不能返回上一步
                history.push('/about','哈哈')
                // history.replace('/about')

            }}>按钮</button>
        </div>
    )

}

location: 获取当前url的一些信息

​ pathname:当前的url

​ search:参数

​ state:跳转路由时传递的参数

import React from 'react';
export default function AboutPage(props){
    let {location}=props;
     console.log(location);
   
    return (
        <div>
            <h1>关于</h1>
        </div>
    )

}

match:当前路由的匹配原则

​ params:动态路由传过来的参数

import React from 'react';
export default function AboutPage(props){
    let {location,match}=props;
    console.log(match);
    return (
        <div>
            <h1>关于</h1>
        </div>
    )

}

总结:
学习了react的函数组件的路由以及组件,动态路由以及传参,收益匪浅,明天继续分享新的内容;

Origin绘制带差异显著性标记的分组均值条形图|科研论文图表教程(附数据格式模板) 传统柱状图虽能呈现组间均值差异,却隐藏个体数据分布;散点图虽能展示原始数据,却难以直观凸显统计显著性。带差异显著性(*)的分组均值条形图——它以“双层叙事”的创新设计,同时呈现群体特征与个体差异。 阅读详情

相关推荐

香橙派OPi 6系列选型指南:RK3588与RK3588S开发板深度对比

开发板选型是嵌入式系统设计的关键环节,尤其在边缘计算和AI推理等场景中,芯片的差异直接影响硬件架构。瑞芯微RK3588及其精简版RK3588S是当前高端开发板的核心方案,两者在PCIe通道、显示输出和SATA支持上存在显著区别。理解这些原理,有助于工程师根据项目需求快速匹配产品。香橙派OPi 6系列基于这两款芯片,衍生出OPi 6、OPi 6 Pro与OPi 6 Max三种形态:紧凑型适合嵌入式门禁与AI盒子,Pro版凭借双屏异显和PCIe 3.0满足收银机与视频分析,Max的双2.5G网口和大内存则面向轻

weixin_29185167的博客 228

【React】SPA - 路由机制 - react-router-dom - 基本路由 - 嵌套路由 - 传递参数 - 路由跳转

前端路由

YK菌的博客 1721

Cadence IC618/Spectre231安装避坑指南:详解License配置、环境变量隔离与依赖检查

本文详细介绍了Cadence IC618/Spectre231的安装与配置避坑指南,包括许可证系统精妙控制、环境隔离模块化实践、依赖管理进阶技巧以及长期维护的黄金法则。通过实战案例和解决方案,帮助工程师构建稳定可靠的EDA工作环境,提升芯片设计效率。

weixin_28683065的博客 461

react函数式组件相关Hooks

react函数式组件相关Hooks

m0_74948153的博客 613

PX4|Gazebo模型加载失败排查指南:从环境变量到资源路径的全面解析

本文针对PX4与Gazebo联合仿真中常见的'Unable to get model name'错误,提供了从环境变量配置、资源路径排查到网络访问问题的全面解决方案。详细解析了GZ_SIM_RESOURCE_PATH等关键变量的作用与设置方法,并给出了离线模型库部署等一劳永逸的修复指南,帮助开发者彻底解决无人机模型加载失败问题。

weixin_29243063的博客 1230

别再手动备份了!用Python脚本批量导出华为/华三交换机配置(附完整代码)

本文详细介绍了如何使用Python脚本实现华为/华三交换机配置的自动化备份,大幅提升网络运维效率。通过paramiko库建立SSH连接,结合pandas处理设备清单,实现配置的批量导出与规范化存储,解决传统手动备份耗时易错的问题。

weixin_28737603的博客 449

超详细的React路由基础使用

一个路由就是一个映射关系(key:value) key为路径, value可能是function或component

我的身体只需要很少的粮食就能养活;而我的灵魂却非常地贪婪,需要日月星辰、山川湖泊和大自然的滋养。 3150

TCN+iTransformer时间序列预测实战:从风电功率预测到源码解析(附完整代码)

本文深入探讨了TCN与iTransformer融合模型在时间序列预测,特别是风电功率预测中的应用。通过解析iTransformer‘倒置’视角的创新架构与TCN强大的局部时序捕捉能力,文章提供了完整的融合方案设计、源码实现及实战调优经验,旨在构建更强大的下一代预测引擎。

weixin_29062671的博客 265

详细介绍React路由

单页Web应用(single page web application,SPA),整个应用只有一个完整的页面,点击页面中的链接不会刷新页面,只会做页面的局部更新。当有多个path相同的情况,不用Switch包的话匹配到home时,第一个匹配了还会往下继续匹配,第二个也会匹配,从而两个都展示,包住后匹配到第一个后就不往下匹配了,从而只显示第一个。1.默认使用的是模糊匹配(输入的路径to必须包含要匹配的路径paath,且顺序要一致)。3.严格匹配不要随便开启,需要再开,有些时候开启会导致无法继续匹配二级路由。

zag666的博客 1967

【SpringBoot 3.x 第56节】再见 Feign?原生 HTTP 接口强势上位,这才是微服务调用的正确姿势!

🏆本文收录于《滚雪球学SpringBoot 3》,专门攻坚指数提升,本年度国内最系统+最专业+最详细(永久更新)。    本专栏致力打造最硬核 SpringBoot3 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。 如果想快速定位学习,可以看这篇【SpringBoot3教程导航帖】,你想学习的都被收集在内,快速投入学习!!两不误。    若还想学习更多,可直接前往《滚雪球学SpringBoot(全版本合集)》,涵盖SpringBoot所有版本教学文章

**My Coding Family** 1017

ZYNQ BRAM实现PS与PL数据交互

有时CPU需要与PL进行小批量的数据交换,可以通过BRAM模块,也就是Block RAM实现此要求。本章通过Zynq的GP Master接口读写PL端的BRAM,实现与PL的交互。在本实验中加入了自定义的FPGA程序,并利用AXI4总线进行配置,通知其何时读写BRAM。以下为本实验原理图,CPU通过AXI BRAM Controller读取BRAM数据,CPU仅配置自定义的PL BRAM Controller 的寄存器,不通过它读写数据。

baidu_34971492的博客 2279

第三十一章 React中路由组件和一般组件

路由组件和一般组件的区别有哪些

天界程序员的博客 1389

Amesim应用篇-电芯等效电路模型标定

为了使计算模型更加准确,在有电芯实验测试数据的情况下,依据现有的实验数据对Amesim中的电池等效电路模型进行标定。标定的目的是为了获得更加符合项目实际情况的电芯等效电路模型,标定完的电芯可以用于搭建PACK模型,也可以用于其他虚拟实验。本文以充电标定为例,进行介绍。放电标定与充电一致。

2201_75375391的博客 1213

React路由快速入门:Class组件和函数式组件的使用

在开始学习React路由之前,先了解一下什么是React路由。React Router是一个为React应用程序提供声明式路由的库。它可以帮助您在应用程序中管理不同的URL,并在这些URL上呈现相应的组件。我们探讨了如何使用Class组件和函数式组件来设置路由。通过掌握React路由的基础知识,您可以轻松地为自己的React应用程序创建复杂的导航系统。更多的学习资料可参考:React Router官方文档: https://reactrouter.com/

笔记、经验、日常分享 688

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

react中v5路由(分别在函数组件和类组件中)

将某种模式下匹配到的所有路由,全都映射到同一个组件的方式就是动态路由。(在这里因为我们的路由组件包裹的是app文件,所以可以把app.js文件看作路由表来理解)当我们进行路由跳转的时候,有时候需要满足某种条件才能跳转,比如只有我们登录成功之后才能。*Switch 的作用就是让当前路径如果被匹配到了,那么就不在向下继续匹配了。前路径了,但是它也会把下面的路由,执行完毕,那么就导致了我们最后无论如何都会。当我们希望给当前的路由添加一个样式的时候,我们可以使用。这样的路径叫做父路径,把例如: /home。

kkkys_kkk的博客 1476

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

react(58)——使用路由的时候虽然不展示所有的路由,但是会一开始就加载所有的路由组件,使用Suspense组件和lazy函数进行解决

1.将路由组件进行懒加载 将 import Div1 from './components/div1' import Div2 from './components/div2' 替换为 const Div1 = lazy(() => import("./components/div1")); const Div2 = lazy(() => import("./components/div2")); 其中lazy来自react包 import React, { Component,

木子 旭的博客 365

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

react-router(V6)配置路由的两种方式BrowseRouter组件式和createBrowseRouter函数式

1.createBrowseRouter()函数、createRoutesFromElements()函数、RouterProvider组件、Route组件搭配使用。方式二:函数式(更受人喜爱的方式!,官网原话:https://reactrouter.com/en/main/start/tutorial#jsx-routes)背景:前端项目都离不开前端路由,react-router第三方库为我们提供了配置前端路由的统一解决方案,其中就有两种方式。

weixin_42776027的博客 973

React路由重定向终极指南:Redirect组件和redirectTo函数完整解析

Reach Router是React生态中备受推崇的下一代路由解决方案,其强大的重定向机制让开发者能够优雅地处理URL跳转需求。无论是简单的路径重定向还是复杂的权限控制场景,Reach Router都提供了简洁而强大的工具来满足你的需求。🚀 ## 🔄 为什么需要路由重定向? 在现代Web应用中,重定向功能至关重要: - **SEO优化**:保持URL的规范性和可访问性 - **用户体验*

gitblog_00170的博客 428

React.js框架

一、框架介绍 JSX语法: 两种类型标签: html标签,以前在js里写html标签得加单引号,现在可以直接在js写普通的html标签 组件标签,比如<App />需要首字符大写 npm start启动

taka_is_beauty的博客 742

React v6(仅支持函数组件,不支持类组件)与v5版本路由使用详情和区别(详细版)

React v6(仅支持函数组件,不支持类组件)与v5版本路由使用详情和区别(详细版)

qq_72760247的博客 949

React(函数式组件、jsx、hook、脚手架、路由、组件库)

这是我对React的学习笔记,内容主要为函数式组件、jsx语法、hook、脚手架的安装与使用、路由的使用(包括重定向等)、组件库(介绍了antd,antV,和ECharts)

hello_helloworld的博客 393

react中函数组件使用v6路由

在react中要是用react-router路由进行页面的跳转分为v5路由和v6路由 在有状态的组件也叫class类组件中大多数使用v5路由,而在无状态的组件也叫函数组件大多数是用v6路由,而现在市面上主流都是用的函数组件也就是v6路由。 这期咱们来讲一下函数组件中的v6路由的配置以及使用

A_fork的博客 2066

react路由使用方法

react路由常用方法 一、router安装与基础路由 二、路由跳转 三、路由参数 四、路由嵌套

weixin_46560512的博客 1594

【尚硅谷React】——React全家桶笔记

尚硅谷天禹老师的react全家桶课程

qq_44870156的博客 1万+

React 如何监听路由变化重新渲染组件

那我们所需要做的只是: 当路由改变时,根据路由,也去请求一下数据就OK了,于是乎: class NewsList extends Component { componentDidMount () { this.fetchData(this.props.location); } fetchData(location) { const type = locati...

u010565037的博客 8476

《二》React Router 手动路由的跳转、嵌套路由、动态路由、路由参数的传递、路由懒加载、通过配置的方式使用路由

上面的跳转,都必须通过点击 link 组件才能实现。React Router V5 中本身就是有 withRouter 这个高阶组件的。

花铛 5034
上一篇: React类组件的属性和函数组件里的hooks
starry__sty
博客等级 码龄6年 30粉丝 120原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值