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. Educational Codeforces Round 91 (Rated for Div. 2) D. Berserk And Fireball

    题目链接:https://codeforces.com/contest/1380/problem/D 题意 给出一个大小为 $n$ 的排列 $a$ 和一个序列 $b$,有两种操作: 花费 $x$ 消除 ...

  2. 【uva 1614】Hell on the Markets(算法效率--贪心)

    题意:有一个长度为N的序列A,满足1≤Ai≤i,每个数的正负号不知.请输出一种正负号的情况,使得所有数的和为0.(N≤100000) 解法:(我本来只想静静地继续做一个口胡选手...←_← 但是因为这 ...

  3. Codeforces Round #682 (Div. 2) C. Engineer Artem (构造)

    题意:给你一个\(n\)x\(m\)的矩阵,你可以任意位置的元素+1,只能加一次,问你如何使得任意位置的元素不等于它四周的值.输出操作后的矩阵. 题解:构造,矩阵中某两个下标的和的奇偶性一定和四周的都 ...

  4. 5.PowerShell DSC核心概念之资源

    什么是资源? 资源为 DSC 配置提供构建基块. 资源公开可配置的属性,并包含本地配置管理器 (LCM) 调用以"使其如此"的 PowerShell 脚本函数. 系统内置资源 可在 ...

  5. LINUX - 通信

    为什么三次握手: 让服务端和客户端都知道,自己的收信能力和发信能力没有问题: 第一次:客户端发给服务端--服务端知道了,自己的收信能力和客户端的发信能力没有问题: 第二次:服务端回复客户端--客户端知 ...

  6. Linux 日志切割方法总结--Logrotate

    一.Logrotate 使用方法 对于Linux系统安全来说,日志文件是极其重要的工具.logrotate程序是一个日志文件管理工具.用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到&qu ...

  7. universities

  8. java8按照lamda表达式去重一个list,根据list中的一个元素

    /** * 按照指定字段给list去重 * @param list * @return */ public static List<DataModel> niqueList(List< ...

  9. console.dir()可以显示一个对象所有的属性和方法

    console.dir()可以显示一个对象所有的属性和方法 具体方法如下:

  10. SSL 数据加密原理简述

    最近调试mqtt协议,为了保证数据安全性和将来客户端的对云的兼容性选择了openssl作为安全加密中间层,而没有使用私有的加密方式.所以花了点时间学习了一下ssl 加密流程整理如下: 因为正常正式使用 ...