React 学习笔记(3) B站视频总结1
封装 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的更多相关文章
- react学习笔记1--基础知识
什么是react A JAVASCRIPT LIBRARY FOR BUILDING USER INTERFACES[React是一个用于构建用户界面的JavaScript库.] React之所以快, ...
- React学习笔记--程序调试
React学习笔记 二 程序调试 前面我们搭建好了React的基本开发环境,可以编写基本的React js程序了.但完成的开发环境肯定包含调试器,怎么调试用React编写的JS程序呢?有浏览器,比 ...
- React学习笔记(一)- 入门笔记
React入门指南 作者:狐狸家的鱼 本文链接:React学习笔记 GitHub:sueRimn 1.组件内部状态state的修改 修改组件的每个状态,组件的render()方法都会再次运行.这样就可 ...
- React学习笔记(七)条件渲染
React学习笔记(七) 六.条件渲染 使用if或条件运算符来创建表示当前状态的元素. 可以使用变量来存储元素.比如: let button = null; if (isLoggedIn) { but ...
- React学习笔记(六)事件处理
React学习笔记(六) 五.事件处理 React事件绑定属性的命名采用驼峰写法,不同于传统DOM全部小写. 如果采用JSX的语法,事件函数需要用大括号{}包裹函数名,不同于传统DOM字符串小括号的方 ...
- React学习笔记(五)State&声明周期
React学习笔记(五) 四.State&声明周期 可以为组件添加"状态(state)".状态与属性相似,但是状态是私有的,完全受控于当前组件. 局部状态就是只能用于类(定 ...
- React学习笔记 - 组件&Props
React Learn Note 4 React学习笔记(四) 标签(空格分隔): React JavaScript 三.组件&Props 组件可以将UI切分成一些独立的.可复用的部件,这样你 ...
- React学习笔记 - 元素渲染
React Learn Note 3 React学习笔记(三) 标签(空格分隔): React JavaScript 二.元素渲染 元素是构成react应用的最小单位. 元素是普通的对象. 元素是构成 ...
- React学习笔记 - JSX简介
React Learn Note 2 React学习笔记(二) 标签(空格分隔): React JavaScript 一.JSX简介 像const element = <h1>Hello ...
- React学习笔记 - Hello World
React Learn Note 1 React学习笔记(一) 标签(空格分隔): React JavaScript 前.Hello World 1. 创建单页面应用 使用Create React A ...
随机推荐
- 键盘类型UIKeyboardType
UITextField.UITextView等能够调出系统键盘的控件,通过下面这个属性可以控制弹出键盘的样式: self.priceTextField.keyboardType = UIKeyboar ...
- C#委托-事件示例
Program.cs using System;using System.Collections.Generic;using System.Linq;using System.Text;using S ...
- [Tommas] ERP系统测试用例设计1(转)
问题: 1.如何进行ERP系统测试用例设计? 2.ERP系统测试用例设计过程? 3.ERP系统测试用例设计的方法? ERP系统本身是一种业务流程很复杂,单据报表众多,逻辑性很强的系统,质量保证方面很难 ...
- Python 开篇
一.Linux基础 - 计算机以及日后我们开发的程序防止的服务器的简单操作 二.Python开发 http://www.cnblogs.com/wupeiqi/articles/5433893.htm ...
- JAVA(windows)安装教程
JAVA(windows)安装教程 一.下载: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133 ...
- 非阻塞多路IO
socket.listen() rfds=[] wfds=[] while(select(rfds,wfds,timeout)){//事件循环 client=socket.accept(timeout ...
- NO24 第三关--企业面试题
[考试目的] 1.学生课后复习及预习情况. 2.未来实际工作中做人做事能力. 3.沟通及口头表达能力. [口头表达技能考试题] 1.描述linux的开机到登陆界面的启动过程(记时2分钟) *****L ...
- Bar Chart _Study
---恢复内容开始--- 以“3D BarChart”为例. 1.Select a theme.(选择一个主题模板) 2.Set up categories and groups.(设置类型和组) 3 ...
- 使用FFmpeg处理视频文件:视频转码、剪切、合并、播放速调整
安装 略. 转码 最简单命令如下: ffmpeg -i out.ogv -vcodec h264 out.mp4ffmpeg -i out.ogv -vcodec mpeg4 out.mp4ffmpe ...
- 011.CI4框架CodeIgniter, 获取查看用户的IP地址和浏览器信息
01.PHP CI4框架CodeIgniter中有Request 类,是用来读取各种用户的数据,其中获取IP地址的代码如下: <?php namespace App\Controllers; c ...