视频地址

封装 ajax 请求模块

src
├─api
│ ajax.js
│ index.js
// axios.js
import axios from 'axios'
import {message} from 'antd' export default function ajax(url, data={}, type='GET') { return new Promise((resolve, reject) => {
let promise
// 1. 执行异步ajax请求
if(type==='GET') { // 发GET请求
promise = axios.get(url, { // 配置对象
params: data // 指定请求参数
})
} else { // 发POST请求
promise = axios.post(url, data)
}
// 2. 如果成功了, 调用resolve(value)
promise.then(response => {
resolve(response.data)
// 3. 如果失败了, 不调用reject(reason), 而是提示异常信息
}).catch(error => {
// reject(error)
message.error('请求出错了: ' + error.message)
})
})
}
// index.js
import ajax from './ajax' const BASE = 'http://localhost:5000'
// 登陆
export const reqLogin = (username, password) => ajax(BASE + '/login', {username, password}, 'POST') // 获取一级/二级分类的列表
export const reqCategorys = (parentId) => ajax(BASE + '/manage/category/list', {parentId}) // ...

封装 jsonp 请求模块

// api/index.js
// yarn add jsonp
import jsonp from 'jsonp'
import {message} from 'antd' export const reqWeather = (city) => {
return new Promise((resolve, reject) => {
const url = `http://api.map.baidu.com/telematics/v3/weather?location=${city}&output=json&ak=3p49MVra6urFRGOT9s8UBWr2`
// 发送jsonp请求
jsonp(url, {}, (err, data) => {
console.log('jsonp()', err, data)
// 如果成功了
if (!err && data.status==='success') {
// 取出需要的数据
const {dayPictureUrl, weather} = data.results[0].weather_data[0]
resolve({dayPictureUrl, weather})
} else {
// 如果失败了
message.error('获取天气信息失败!')
}
})
})
}

注意配置代理,解决跨域

主页结构

 home.jsx

import React, { Component } from 'react'
/**
* BrowserRouter: 使用了 HTML5 history API 的高阶路由组件,保证UI 界面和 URL 保持同步。
* Switch: 匹配路由
* Route: 将匹配的路由导航到目标页面
*/
import { BrowserRouter, Switch, Route } from 'react-router-dom' import Login from '../pages/login'
import Admin from '../pages/admin' class BasicRoute extends Component {
render() {
return (
<BrowserRouter>
<Switch>
<Route path='/login' component={Login} />
<Route path='/' component={Admin} />
</Switch>
</BrowserRouter>
)
}
} export default BasicRoute

admin.jsx

// 后台管理主路由组件
import React, { Component } from "react"
import { Redirect, Switch, Route } from 'react-router-dom'
import { Layout } from "antd" /**
* 导入组件
* 注意 侧边组件\头部\底部组件都是在定义在components文件夹下
* 其他content中的组件定义在 pages 文件夹下
*/
import LeftNav from '../../components/left-nav'
import Home from '../home/home'
import User from '../user/user'
import Bar from '../charts/bar'
import Line from '../charts/line'
import Pie from '../charts/pie'
import Order from '../order/order'
import NotFound from '../not-found/not-found' const { Header, Footer, Sider, Content } = Layout export default class Admin extends Component {
render() {
return (
<Layout style={{ minHeight: "100%" }}>
<Sider>
<LeftNav />
</Sider>
<Layout>
<Header>1234</Header>
<Content style={{ margin: 20, backgroundColor: "#fff" }}>
<Switch>
<Redirect from="/" exact to="/home" />
<Route path="/home" component={Home} />
<Route path="/user" component={User} />
<Route path="/charts/bar" component={Bar}/>
<Route path="/charts/pie" component={Pie}/>
<Route path="/charts/line" component={Line}/>
<Route path="/order" component={Order}/>
<Route component={NotFound} /> // 精确匹配
</Switch>
</Content>
<Footer>底部</Footer>
</Layout>
</Layout>
)
}
}

自定义无状态组件

import React from 'react'
import './index.less' export default function LinkButton(props) {
return <button {...props} className="link-button"></button>
}
.link-button {
color: #333333;
cursor: pointer;
}
import LinkButton from '../../components/link-button'

render(props) {
return (<div>
<LinkButton onClick={() => console.log('LinkButton')}>修改</LinkButton>
</div>)
)

React 学习笔记(3) B站视频总结1的更多相关文章

  1. react学习笔记1--基础知识

    什么是react A JAVASCRIPT LIBRARY FOR BUILDING USER INTERFACES[React是一个用于构建用户界面的JavaScript库.] React之所以快, ...

  2. React学习笔记--程序调试

    React学习笔记 二 程序调试   前面我们搭建好了React的基本开发环境,可以编写基本的React js程序了.但完成的开发环境肯定包含调试器,怎么调试用React编写的JS程序呢?有浏览器,比 ...

  3. React学习笔记(一)- 入门笔记

    React入门指南 作者:狐狸家的鱼 本文链接:React学习笔记 GitHub:sueRimn 1.组件内部状态state的修改 修改组件的每个状态,组件的render()方法都会再次运行.这样就可 ...

  4. React学习笔记(七)条件渲染

    React学习笔记(七) 六.条件渲染 使用if或条件运算符来创建表示当前状态的元素. 可以使用变量来存储元素.比如: let button = null; if (isLoggedIn) { but ...

  5. React学习笔记(六)事件处理

    React学习笔记(六) 五.事件处理 React事件绑定属性的命名采用驼峰写法,不同于传统DOM全部小写. 如果采用JSX的语法,事件函数需要用大括号{}包裹函数名,不同于传统DOM字符串小括号的方 ...

  6. React学习笔记(五)State&声明周期

    React学习笔记(五) 四.State&声明周期 可以为组件添加"状态(state)".状态与属性相似,但是状态是私有的,完全受控于当前组件. 局部状态就是只能用于类(定 ...

  7. React学习笔记 - 组件&Props

    React Learn Note 4 React学习笔记(四) 标签(空格分隔): React JavaScript 三.组件&Props 组件可以将UI切分成一些独立的.可复用的部件,这样你 ...

  8. React学习笔记 - 元素渲染

    React Learn Note 3 React学习笔记(三) 标签(空格分隔): React JavaScript 二.元素渲染 元素是构成react应用的最小单位. 元素是普通的对象. 元素是构成 ...

  9. React学习笔记 - JSX简介

    React Learn Note 2 React学习笔记(二) 标签(空格分隔): React JavaScript 一.JSX简介 像const element = <h1>Hello ...

  10. React学习笔记 - Hello World

    React Learn Note 1 React学习笔记(一) 标签(空格分隔): React JavaScript 前.Hello World 1. 创建单页面应用 使用Create React A ...

随机推荐

  1. python导入第三方库

    2.Python的库一般包含两个方面:第三方库和标准库 3.Python的time标准库主要包含三个方面的内容:(1)时间处理函数(2)时间格式化(3)程序计时 4.turtle画笔运动函数的功能是进 ...

  2. MySQL操作之DCL

    目录 SQL语句的分类 DCL语句 SQL语句的分类 DDL(Data Definition Languages)语句:数据定义语言.这些语句定义了不同的数据段. 数据库.表.列.索引等数据库对象的定 ...

  3. StringUtils工具类常用方法汇总:判空、转换、移除、替换、反转。

    Apache commons lang3包下的StringUtils工具类中封装了一些字符串操作的方法,非常实用,使用起来也非常方便.最近自己也经常在项目中使用到了里面的一些方法,在这里将常用的方法总 ...

  4. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 按钮:原始按钮样式(未被操作)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  5. Day3-C-Radar Installation POJ1328

    Assume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. ...

  6. Day2-J-逃离迷宫-HDU-1728

    给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有些地方是障碍,她必须绕行,从迷宫的一个位 ...

  7. IDEA 单行注释与代码对齐

    效果 修改步骤 Settings -> Editor -> Code Style (1)修改.java文件的注释 comment   评论.注释.意见. (2)修改.html文件的注释 ( ...

  8. 如何关闭 Mac OS X EI Capitan 系统文件保护

    在修改 Mac OS X EI Capitan 系统的某些系统文件的过程中,你可能会遇到即使你加了 sudo 以管理员身份去操作页会被拒绝, 这是一个名为 SIP(System Integrity P ...

  9. 做一个php登陆页面,用pc登陆和用手机登陆弹出来的登陆页面不一样。

    <?phpheader('Content-Type:text/html; charset=UTF-8');//定义页面编码为utf8$is_pc = (strpos($agent, 'windo ...

  10. 说说我对SQL语句执行顺序的理解,以SQL Server为例

    有人说SQL语句难学,其实并不难!只要掌握了基本的语句执行顺序,用程序化的思维分析结构,再难的问题也会迎刃而解! 假设有如下表emp 现在要求 列出员工姓名(ename)中不含A的所有人按照部门编号( ...