React+umi+dva 项⽬实战-lesson6

news/2024/7/15 19:08:57 标签: react.js, 前端, 前端框架

lesson4-react全家桶及原理解析.mov

项⽬实战

  • 项⽬实战
    • 课堂⽬标
    • 资源
    • 知识要点
    • 起步
    • Generator
    • redux-saga
    • umi
      • why umi
      • dva
      • dva+umi 的约定
      • 安装
      • Umi基本使⽤
      • 理解dva
    • 移动端cra项⽬简介

课堂⽬标

  1. 掌握企业级应⽤框架 - umi
  2. 掌握数据流⽅案 - dva
  3. 掌握⽣成器函数 - generator
  4. 掌握redux异步⽅案 - redux-saga

资源

  1. umi
  2. dva
  3. redux-saga:中⽂、英⽂
  4. generator

知识要点

  1. generator⽤法
  2. redux-saga⽤法
  3. umi⽤法

起步

Generator

Generator 函数是 ES6 提供的⼀种异步编程解决⽅案,语法⾏为与传统函数完全不同,详细参考参考阮⼀峰。

  1. function关键字与函数名之间有⼀个*;
  2. 函数体内部使⽤yield表达式,定义不同的内部状态。
  3. yield表达式只能在 Generator 函数⾥使⽤,在其他地⽅会报错。
function* helloWorldGenerator() {
   
	 yield 'hello';
	 yield 'world';
	 return 'ending';
}
var hw = helloWorldGenerator();
//执⾏
console.log(hw.next());
console.log(hw.next());
console.log(hw.next());
console.log(hw.next());

由于 Generator 函数返回的遍历器对象,只有调⽤ next⽅法才会遍历下⼀
个内部状态,所以其实提供了⼀种可以暂停执⾏的函数。 yield表达式就
是暂停标志。

redux-saga

  • 概述:redux-saga使副作⽤(数据获取、浏览器缓存获取)易于管理、执⾏、测试和失败处理
  • 地址:https://github.com/redux-saga/redux-saga
  • 安装:npm install --save redux-saga
  • 使⽤:⽤户登录

先创建⼀个RouterPage

import React, {
    Component } from "react";
import {
    BrowserRouter, Switch, Link, Route } from "react/router-dom";
import LoginPage from "./LoginPage";
import UserPage from "./UserPage";
import PrivatePage from "./PrivatePage";

export default class RouterPage extends Component {
   
	 render() {
   
		 return (
			 <div>
				 <h1>RouterPage</h1>
				 <BrowserRouter>
					 <Link to="/login">登录</Link>
					 <Link to="/user">⽤户中⼼</Link>
					 <Switch>
						<Route path="/login" component={
   LoginPage} />
						{
   /* <Route path="/user" component={
   UserPage} /> */}
					 	<PrivatePage path="/user" component={
   UserPage} />	
					 </Switch>
				 </BrowserRouter>
			 </div>
		 );
	 }
}

创建store/index.js

import {
    createStore, combineReducers, applyMiddleware } from "redux";
import thunk from "redux-thunk";

const initialLogin = {
   
	isLogin: false,
	loading: false,
	name: "",
	error: "",
};

function loginReducer(state = {
    ...initialLogin }, action) {
   
 switch (action.type) {
   
 	case "requestLogin":
		 return {
   
			 ...initialLogin,
			 loading: true,
		 };
	 case "requestSuccess":
		 return {
   
			 ...state,
			 isLogin: true,
			 loading: false,
		 };
	 default:
	 	return state;
	 }
}

const store = createStore(
	combineReducers({
    user: loginReducer }),
	applyMiddleware(thunk),
);

export default store;

登录⻚⾯pages/LoginPage.js

import React, {
    Component } from "react";
import {
    Redirect } from "react-router-dom";
import {
    connect } from "react-redux";

export default connect(
	//mapStateToProps
	state => ({
   
		isLogin: state.user.isLogin,
		loading: state.user.loading,
	}),
	{
   
		//mapDispathToProps
		/* login: () => ({
   
			type: "requestSuccess",
		}), */
		login: () => dispatch => {
   
			dispatch({
    type: "requestLogin" });
			setTimeout(() 

http://www.niftyadmin.cn/n/5438648.html

相关文章

1.IP复习课作业

1.IP复习课作业 1.为路由器各接口配置IP以及环回 R1 R2 R3 R4 R5 R6 2.配置dhcp为主机下发IP PC1 PC2 3.配置静态路由 R1 R2 R3 R4 R5 PC端通信 4.防止成环 R1 R2、4、5一样 5.修改优先级 R1 R2、3、4、5同样进行修改 6.均可访问R6环回 R5配置easy IP R1 ping R6环回 PC ping R…

JavaSE(上)-Day6

JavaSE&#xff08;上&#xff09;-Day6 数组数组的定义数组的初始化打印数组分析数组索引数组内存图 方法方法的定义和调用方法的重载方法的内存图 二维数组二位数组的创建和初始化二维数组的内存图 数组 1.数组是一种容器&#xff0c;可以一次存储多个相同类型的数据 数组的…

前端 - 基础 表单标签 -- 表单元素( input - type属性) 文本框和密码框

表单元素 &#xff1a; 在表单域中可以定义各种表单元素&#xff0c;这些表单元素就是允许用户在表单中输入或选择 的内容控件。 表单元素的外观也各不一样&#xff0c;有小圆圈&#xff0c;有正方形&#xff0c;也有方框&#xff0c;乱七八糟的&#xff0c;各种各样&#xf…

Linux重命名文件有几种方法

Linux系统是一种自由开源的操作系统&#xff0c;具有强大的功能和灵活性。在Linux系统中&#xff0c;重命名文件是一个常见的操作。本文将介绍Linux系统中重命名文件的几种方法。 1. 使用命令行重命名文件。 在Linux系统中&#xff0c;通过命令行界面来操作是最常见的方法。使…

【论文阅读】Energy Efficient Real-time Task Scheduling on CPU-GPU Hybrid Clusters

Energy Efficient Real-time Task Scheduling on CPU-GPU Hybrid Clusters 出处&#xff1a;2017IEEE Xplore 基于CPU-GPU混合集群的高效实时任务调度 主要工作&#xff1a;通过动态电压和频率缩放研究了新兴CPU-GPU混合集群的节能问题。 首次分析GPU特定的DVFS模型。 设计了…

阿里云MongoDB 分片集群介绍

MongoDB分片集群技术用于解决海量数据的存储问题&#xff0c;本文介绍MongoDB分片集群相关的常用知识。 什么情况下使用分片集群&#xff1f; 当您遇到如下问题时&#xff0c;可以使用分片集群解决&#xff1a; 存储容量受单机限制&#xff0c;即磁盘资源遭遇瓶颈。 读写能力…

数据结构从入门到精通——直接插入排序

直接插入排序 前言一、直接插入排序的基本思想&#xff1a;二、直接插入排序的实例三、直接插入排序的动图展示四、直接插入排序的具体代码test.c 前言 直接插入排序是一种简单的排序算法&#xff0c;其工作原理是逐个将待排序元素插入到已排序序列中的适当位置&#xff0c;直…

浅谈 前端的动态绑定属性

目录 前言1. 基本知识2. Demo 前言 作为Java开发者&#xff0c;从开发转到全栈&#xff0c;前端好些细节都需要科普&#xff0c;这不就来个动态绑定属性 起因是这个&#xff1a; <uni-tr> <uni-td align"center" :rowspan"checkTypesCount 1"…