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(
	//mapStateToProps
	state => ({
   
		isLogin: state.user.isLogin,
		loading: state.user.loading,
	}),
	{
   
		//mapDispathToProps
		/* login: () => ({
   
			type: "requestSuccess",
		}), */
		login: () => dispatch => {
   
			dispatch({
    type: "requestLogin" });
			setTimeout(() 
  • 12
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT帮

你的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值