1.React应用

1.1创建应用

创建项目可以使用react脚手架,创建步骤如下

1)安装react脚手架

npm i -g create-react-app

2)创建项目

create-react-app react-demo-app

3)启动项目

cd react-demo-app
npm start

4)启动后,访问http://localhost:3000可以看到react页面,说明创建成功。然后 删除src下所有的文件,后期就可以在这个基础上进行开发。

2.react路由

2.1实例说明

在学习之前,先创建一个react的应用,然后删除src下所有的文件,创建一个App.jsx的文件,内容如下

import React from "react";
import {
BrowserRouter as Router,
Switch,
Route,
Link
} from "react-router-dom"; export default function App() {
return (
<Router>
<div>
<nav>
<ul>
<li>
<Link to="/">Home</Link>
</li>
<li>
<Link to="/about">About</Link>
</li>
<li>
<Link to="/users">Users</Link>
</li>
</ul>
</nav> <Switch>
<Route path="/about" component={About} />
<Route path="/users" component={Users} />
<Route path="/" component={Home} />
</Switch>
</div>
</Router>
);
} function Home() {
return <h2>我是Home内容</h2>;
} function About() {
return <h2>我是About内容</h2>;
} function Users() {
return <h2>我是Users内容</h2>;
}

再新建一个index.js文件

import React from 'react'
import ReactDOM from 'react-dom'
import App from './App' ReactDOM.render(<App/>,document.getElementById('root'))

运行后看效果,点击不同的连接跳转到不同的路由。

2.2基本介绍

React Router中的组件主要分为三类:

1)路由器,如<BrowserRouter><HashRouter>

2)路线匹配器,如<Route><Switch>

3)导航,如<Link><NavLink><Redirect>

添加路由的页面,其最外层必须被BrowserRouter或HashRouter包裹,否则不生效。

在Switch中放入许多的Route,当Switch被渲染时,就会根据url去匹配Route的path,然后渲染对应页面的元素,在component中指定要显示的组件。

除了使用Link进行路径跳转外,按钮也可以进行路径的跳转,只是麻烦一点。在点击按钮是,给history设置要跳转的路由就行:

<button onClick={()=>this.clickLink('/users')}>Users</button>

方法

clickLink(url){
this.props.histroy.push(url)
}

2.3路由的嵌套

import React from "react";
import {
BrowserRouter as Router,
Switch,
Route,
Link
} from "react-router-dom"; export default function App() {
return (
<Router>
<div>
<nav>
<ul>
<li>
<Link to="/">Home</Link>
</li>
<li>
<Link to="/about">About</Link>
</li>
<li>
<Link to="/users">Users</Link>
</li>
</ul>
</nav> <Switch> <Route path="/about" component={About} />
<Route path="/users" component={Users} />
<Route path="/" component={Home} />
</Switch>
</div>
</Router>
);
} function Home() {
return <h2>我是Home内容</h2>;
} function About() {
return <h2>我是About内容</h2>;
} function Users() {
return (
<div>
<h2>我是Users内容</h2>
<Router>
<li><Link to="/users/info">用户信息</Link></li>
<li><Link to="/users/manage">用户管理</Link></li>
<Switch>
<Route path="/users/info" component={UserInfo} />
<Route path="/users/manage" component={UserManage} />
</Switch>
</Router>
</div> )
}
function UserInfo() {
return <h2>我是Users下的UserInfo内容</h2>;
}
function UserManage() {
return <h2>我是Users下的UserManage内容</h2>;
}

路由嵌套,就是在需要嵌套的组件中再继续定义路由即可,路径带上父组件的路由路径。如果需要在打开父组件时默认显示一个子组件,设置重定向即可

1)导入

import {Redirect} from "react-router-dom";

2)设置默认路由

<Switch>
<Route path="/users/info" component={UserInfo} />
<Route path="/users/manage" component={UserManage} />
<Redirect to="users/info"/>
</Switch>

2.4路由传递参数

import React from "react";
import {
BrowserRouter as Router,
Switch,
Route,
Link,
Redirect
} from "react-router-dom"; export default function App() {
return (
<Router>
<div>
<nav>
<ul>
<li>
<Link to="/">Home</Link>
</li>
<li>
<Link to="/about">About</Link>
</li>
<li>
<Link to="/users">Users</Link>
</li>
</ul>
</nav> <Switch>
<Route path="/about" component={About} />
<Route path="/users" component={Users} />
<Route path="/" component={Home} /> </Switch>
</div>
</Router>
);
} function Home() {
return <h2>我是Home内容</h2>;
} function About() {
return <h2>我是About内容</h2>;
} function Users() {
return (
<div>
<h2>我是Users内容</h2>
<Router>
<li><Link to="/users/info">用户信息</Link></li>
<li><Link to="/users/manage/1">用户管理</Link></li>
<Switch>
<Route path="/users/info" component={UserInfo} />
<Route path="/users/manage/:id" component={UserManage} />
<Redirect to="users/info"/>
</Switch>
</Router>
</div> )
}
function UserInfo() {
return <h2>我是Users下的UserInfo内容</h2>;
}
function UserManage(props) {
return <h2>我是Users下的UserManage内容,参数是{props.match.params.id}</h2>;
}

和2.3进行对比,传递参数就是指定了那个路由需要参数,参数的名字是什么。参数传递后通过props.match.params.xxx来获取。

3.redux

3.1定义与安装

它是一个独立专门用于做状态管理的js库,但不是react的插件。即管理react应用中多个组件共享的状态。

安装

npm i redux -S

React高级的更多相关文章

  1. React高级指南

    高级指南 1.深入JSX: 从本质上讲,JSX 只是为 React.createElement(component, props, ...children) 函数提供的语法糖. 因为 JSX 被编译为 ...

  2. React 高级指南小记

    接上篇,还是笔记,还是干货. 深入 JSX 如果使用 JSX 表达式 <Foo />,Foo 必须在范围内,因为这些标签被编译为对指定变量的直接引用. 由于 JSX 编译为对 React. ...

  3. React高级特性

    目录: 容器组件 JSX可展开属性 动画 : CSS3 Transition 默认属性 复用代码:mixin 容器组件 React元素也可以包含其他的子元素,这意味着响应的React组件是一个 容器组 ...

  4. React高级指引

    深入JSX 本质上来讲,JSX是为React.createElement方法提供的语法糖 <MyButton color=}> Click Me </MyButton> 编译为 ...

  5. React高级教程(es6)——(1)JSX语法深入理解

    从根本上来说,JSX语法提供了一种创建React元素的语法糖,JSX语句可以编译成: React.createElement(component, props, …children)的形式,比如: & ...

  6. [Web 前端] React高级教程(es6)——(2)对于Refs最新变动的理解

    cp : https://blog.csdn.net/liwusen/article/details/53384561 1.什么是ReactJS中的refs 在React中组件并不是真实的 DOM 节 ...

  7. (四)React高级内容

    1. React developertools安装及使用 2. PropTypes与DefaultProps 讲一下PropTypes, 先拿TodoItem来说: 从几种类型中选: 3 props ...

  8. 可复用 React 的 HOC 以及的 Render Props

    重复是不可能的,这辈子都不可能写重复的代码 当然,这句话分分钟都要被产品(领导)打脸,真的最后一次改需求,我们烦恼于频繁修改的需求 虽然我们不能改变别人,但我们却可以尝试去做的更好,我们需要抽象,封装 ...

  9. Java自学教程视频

    BAT大咖助力 全面升级Android面试 BAT大牛亲授 基于ElasticSearch的搜房网实战 从天气项目看Spring Cloud微服务治理 Java企业级电商项目架构演进之路  Tomca ...

随机推荐

  1. Pytest(6)重复运行用例pytest-repeat

    前言 平常在做功能测试的时候,经常会遇到某个模块不稳定,偶然会出现一些bug,对于这种问题我们会针对此用例反复执行多次,最终复现出问题来. 自动化运行用例时候,也会出现偶然的bug,可以针对单个用例, ...

  2. 2019牛客暑期多校训练营(第四场)D-triples I

    >传送门< 题意:求最少需要多少个3的倍数按位或后可以得到数字a 思路:利用3的倍数对应的二进制数的性质来先选出一个x,然后根据数字a再配一个y出来 首先,我们都知道十进制中,任意一个数只 ...

  3. Codeforces Round #655 (Div. 2) A. Omkar and Completion

    题目链接:https://codeforces.com/contest/1372/problem/A 题意 构造一个大小为 $n$ 的数组 $a$,要求满足 $1 \le a_i \le n$,且不存 ...

  4. Educational Codeforces Round 87 (Rated for Div. 2) D树状数组加二分删除的值

    Sample Input 5 4 1 2 3 4 5 -5 -1 -3 -1 Sample Output 3 思路,首先发现a[i]的值的范围是在1~n之间,每次插入我们可以直接把cnt[a[i]]+ ...

  5. 【noi 2.6_162】Post Office(DP)

    这题和"山区建小学"除了输入不同,其他都一样.(解析可见我的上一篇随笔) 但是,这次我对dis[][]加了一个优化,画一下图就可明白. 1 #include<cstdio&g ...

  6. 牛客小白月赛17 G 区间求和

    传送门 题意: 题解: 原本想着使用暴力方法: 1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream& ...

  7. 洛谷 P6225 [eJOI2019]异或橙子 (树状数组)

    题意:有\(n\)个数,起始值均为\(0\),进行\(q\)次操作,每次输入三个数,如果第一个数为\(1\),则将第\(i\)个数修改为\(j\),如果为\(2\),则求区间\([l,r]\)内的所有 ...

  8. 踏上Revit二次开发之路 1 准备工作

    1 准备工作 工欲善其事,必先利其器.在正式开始之前,我觉得有必要先盘点一下需要准备些什么. 1.1 硬件设备 PC机一台(谢绝Apple). 配置不能太低,至少要i3以上的cpu.4g以上的内存和支 ...

  9. [Python] Pandas的delete、drop函数的用法

    目录 drop函数 Axis(轴)含义 drop用法实验 delete函数 drop函数 DataFrame.drop(labels=None, axis=0, index=None, columns ...

  10. JVM学习路线

    JVM探究 请你谈谈你对JVM的理解? java8虚拟机和之前的变化更新? 什么是OOM,什么是栈溢出StackOverFlowError?怎么分析? JVM的常用调优参数有哪些? 内存快照如何抓取, ...