React高级
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高级的更多相关文章
- React高级指南
高级指南 1.深入JSX: 从本质上讲,JSX 只是为 React.createElement(component, props, ...children) 函数提供的语法糖. 因为 JSX 被编译为 ...
- React 高级指南小记
接上篇,还是笔记,还是干货. 深入 JSX 如果使用 JSX 表达式 <Foo />,Foo 必须在范围内,因为这些标签被编译为对指定变量的直接引用. 由于 JSX 编译为对 React. ...
- React高级特性
目录: 容器组件 JSX可展开属性 动画 : CSS3 Transition 默认属性 复用代码:mixin 容器组件 React元素也可以包含其他的子元素,这意味着响应的React组件是一个 容器组 ...
- React高级指引
深入JSX 本质上来讲,JSX是为React.createElement方法提供的语法糖 <MyButton color=}> Click Me </MyButton> 编译为 ...
- React高级教程(es6)——(1)JSX语法深入理解
从根本上来说,JSX语法提供了一种创建React元素的语法糖,JSX语句可以编译成: React.createElement(component, props, …children)的形式,比如: & ...
- [Web 前端] React高级教程(es6)——(2)对于Refs最新变动的理解
cp : https://blog.csdn.net/liwusen/article/details/53384561 1.什么是ReactJS中的refs 在React中组件并不是真实的 DOM 节 ...
- (四)React高级内容
1. React developertools安装及使用 2. PropTypes与DefaultProps 讲一下PropTypes, 先拿TodoItem来说: 从几种类型中选: 3 props ...
- 可复用 React 的 HOC 以及的 Render Props
重复是不可能的,这辈子都不可能写重复的代码 当然,这句话分分钟都要被产品(领导)打脸,真的最后一次改需求,我们烦恼于频繁修改的需求 虽然我们不能改变别人,但我们却可以尝试去做的更好,我们需要抽象,封装 ...
- Java自学教程视频
BAT大咖助力 全面升级Android面试 BAT大牛亲授 基于ElasticSearch的搜房网实战 从天气项目看Spring Cloud微服务治理 Java企业级电商项目架构演进之路 Tomca ...
随机推荐
- Mac通过docker一键部署airflow
目录 Airflow部署及使用 1.Dockerhub查看镜像地址 2.拉取docker镜像 3.在宿主机创建外挂文件夹 4.创建docker容器 5.重新创建docker容器 5.1.查看airfl ...
- 【数组】leetcode——移除元素
编号:27. 移除元素 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度. 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 ...
- java swing JDialog 和 java.util.concurrent的使用
参考链接: Java-Swing的JFrame的一些插件使用详解 java swing JDialog 使用 ScheduledExecutorService定时周期执行指定的任务 swing JDi ...
- python爬取网易翻译 和MD5加密
一.程序需要知识 1.python中随机数的生成 # 生成 0 ~ 9 之间的随机数 # 导入 random(随机数) 模块 import random print(random.randint(0, ...
- AtCoder Beginner Contest 181 E - Transformable Teacher (贪心,二分)
题意:有一长度为奇数\(n\)的数组\(a\),和长度为\(m\)的数组\(b\),现要求从\(b\)中选择一个数放到\(a\)中,并将\(a\)分成\((n+1)/2\)个数对,求最小的所有数对差的 ...
- P3376 【模板】网络最大流——————Q - Marriage Match IV(最短路&最大流)
第一道题是模板题,下面主要是两种模板,但都用的是Dinic算法(第二个题也是) 第一题: 题意就不需要讲了,直接上代码: vector代码: 1 //invalid types 'int[int]' ...
- Java基础(第二期)
数据类型扩展以及面试题讲解 整数拓展:进制 int i=10; int i2=010; //八进制0 int i3=0x10; //十六进制0x 0~9 A~F 16 相关进制转换自行学习,用的不多 ...
- codeforces 1029E Tree with Small Distances【思维+贪心】 【非原创】
题目:戳这里 学习博客:戳这里 题意:给一个树加最少的边,使得1到所有点的距离小于等于2. 解题思路:分析样例3可以看出,如果一个点到1的距离大于2,那么建立1到该点的父亲节点的边将比直接与该点建边更 ...
- Linux 驱动框架---cdev字符设备驱动和misc杂项设备驱动
字符设备 Linux中设备常见分类是字符设备,块设备.网络设备,其中字符设备也是Linux驱动中最常用的设备类型.因此开发Linux设备驱动肯定是要先学习一下字符设备的抽象的.在内核中使用struct ...
- Inkscape 太慢
问题: 在画板上图像较多时, 会在粘贴 / 删除 时会陷入长时间的等待 解决: 最佳: Ubuntu上面的比windows上的快上几十倍, 测试比较, 感觉并不是Ubuntu上多用了GPU, 总之, ...