当前位置: 首页 > news >正文

React+umi+dva 项⽬实战-lesson6

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(//mapStateToPropsstate => ({isLogin: state.user.isLogin,loading: state.user.loading,}),{//mapDispathToProps/* login: () => ({type: "requestSuccess",}), */login: () => dispatch => {dispatch({ type: "requestLogin" });setTimeout(() 
http://www.lryc.cn/news/321089.html

相关文章:

  • Vue el-table 合并单元格
  • 面试算法-61-二叉树的右视图
  • 【鸿蒙HarmonyOS开发笔记】动画过渡效果之布局更新动画
  • 过路费的题解
  • 51单片机LED8*8点阵显示坤坤跳舞打篮球画面
  • C++_day6:2024/3/18
  • 汇编语言和IBM的关系
  • 堆(数据结构)
  • 医药工厂5G智能制造数字孪生可视化平台,推进医药企业数字化转型
  • C语言学习--八种排序算法
  • Infineon_TC264智能车代码初探及C语言深度学习(二)
  • 第十三届蓝桥杯(C/C++ 大学B组)
  • 数据结构从入门到精通——排序的概念及运用
  • react面试题总结
  • 5_springboot_shiro_jwt_多端认证鉴权_禁用Cookie
  • 条形码申请指南:外地人如何成功注册香港条形码
  • Covalent Network借助大规模的历史Web3数据集,推动人工智能发展
  • test测试类-变量学习
  • 【DL经典回顾】激活函数大汇总(二十七)(Bent Identity附代码和详细公式)
  • element-plus el-table表格默认选中某一行
  • Vue+SpringBoot打造民宿预定管理系统
  • 基于单片机的模糊PID炉温控制系统设计
  • 深入浅出落地应用分析:AI数字人「微软小冰」
  • 【早鸟优惠|高录用|EI稳定检索】2024年虚拟现实、图像和信号处理国际学术会议(ICVISP 2024)诚邀投稿/参会!
  • CPU设计实战—异常处理指令
  • Elasticsearch(13) match_phrase的使用
  • 通过路由器监控,优化网络效率
  • 使用canvas实现图纸标记及回显
  • 鸿蒙-自定义组件的生命周期
  • 【Linux】自动化构建工具-make/Makefile