react基础---react全家桶03

摘要:
目录:1.Redux 1.1 raw,原始步骤1.2 react reducer,两种写入方法1.3存储多个reducer 2.Redux中间密钥,Redux logger | Redux中继异步请求,调用dispatch3.router基本:BrowserRouter,Link,Route,Switch,Redirect,404参数路由保护内容:1.Reduux安装#npminstallreducer--保存1.1 raw、原始步骤存储,CreateStore reducer getState dispatch subscribe 1.2react reducer。有两种编写方法可以安装#npminstallreact reducer——save provider来传输Linux。“正在登录…”:“正在登录”});});视图代码

目录:

1. redux

  1.1 原始,原始步骤

  1.2 react-reducer,两种写法(导出普通写法 和 装饰器的写法)

  1.3 存储多个reducer

2. redux中间键,redux-logger | redux-thunk

  异步请求,调用dispatch

3. router

  基本:BrowserRouter, Link, Route, Switch, Redirect(tab中默认页面),404

  传参

  路由守卫

 

内容:

1. redux

  安装

  #npm install redux --save

  1.1 原始,原始步骤

    store,createStore

    reducer

    getState

    dispatch

    subscribe

  react基础---react全家桶03第1张

 react基础---react全家桶03第2张

 react基础---react全家桶03第3张

  1.2 react-reducer,两种写法(导出普通写法 和 装饰器的写法)

    安装

    #npm install react-redux --save

    Provider传递redux。connect接收,connect(state,{dispatch方法})

react基础---react全家桶03第4张

 react基础---react全家桶03第5张

 react基础---react全家桶03第6张

react基础---react全家桶03第7张

2. redux中间键,redux-logger | redux-thunk

  安装 #npm install redux-thunk redux-logger --save

  异步请求,调用dispatch

react基础---react全家桶03第8张

 使用:connect第二个参数中,对象的value可以是对象和函数,碰到对象直接调用dispatch,碰到是函数用thunk中间键异步请求,再dispatch

react基础---react全家桶03第9张

 3 存储多个reducer,combineReducers多个reducer柔和成一个

 react基础---react全家桶03第10张

3. router

  安装 #npm install --save react-router-dom

  官网:https://reacttraining.com/react-router/

  3.1 基本:BrowserRouter, Link, Route, Switch, Redirect(tab中默认页面),404

  3.2 传参

    history: 导航指令
    match: 获取参数信息
    location: 当前url信息

react基础---react全家桶03第11张react基础---react全家桶03第12张
// 传递进来路由器对象
function Detail(props) {
  // 1.history: 导航指令
  // 2.match: 获取参数信息
  // 3.location: 当前url信息
  console.log(props);

  return (
    <div>
      {location.pathname}
      当前课程:{props.match.params.course}
      <button onClick={props.history.goBack}>后退</button>
    </div>
  );
}
View Code

  3.3 路由守卫

react基础---react全家桶03第13张react基础---react全家桶03第14张
//store
export const user = (
  state = { isLogin: false, loading: false, error: "" },
  action
) => {
  switch (action.type) {
    case "requestLogin":
      return { isLogin: false, loading: true, error: "" };
    case "loginSuccess":
      return { isLogin: true, loading: false, error: "" };
    case "loginFailure":
      return { isLogin: false, loading: false, error: action.message };
    default:
      return state;
  }
};
export function login() {
  return dispatch => {
    dispatch({ type: "requestLogin" });
    setTimeout(() => {
      dispatch({ type: "login" });
    }, 2000);
  };
}
View Code
react基础---react全家桶03第15张react基础---react全家桶03第16张
// 路由守卫
// 希望用法:<PrivateRoute component={About} path="/about" ...>
const PrivateRoute = connect(state => ({ isLogin: state.user.isLogin }))(
  ({ component: Comp, isLogin, ...rest }) => {
    // 做认证
    // render:根据条件动态渲染组件
    return (
      <Route
        {...rest}
        render={props =>
          isLogin ? (
            <Comp />
          ) : (
            <Redirect
              to={{
                pathname: "/login",
                state: { redirect: props.location.pathname }
              }}
            />
          )
        }
      />
    );
  }
);

// 登录组件
const Login = connect(
  state => ({
    isLogin: state.user.isLogin,
    loading: state.user.loading,
    error: state.user.error // 登录错误信息
  }),
  { login }
)(function({ location, isLogin, login, loading, error }) {
  const redirect = location.state.redirect || "/";
  const [uname, setUname] = useState(""); // 用户名输入状态
  if (isLogin) {
    return <Redirect to={redirect} />;
  }

  return (
    <div>
      <p>用户登录</p>
      <hr />
      {/* 登录错误信息展示 */}
      {error && <p>{error}</p>}
      {/* 输入用户名 */}
      <input
        type="text"
        onChange={e => setUname(e.target.value)}
        value={uname}
      />
      <button onClick={() => login(uname)} disabled={loading}>
        {loading ? "登录中..." : "登录"}
      </button>
    </div>
  );
});
View Code

免责声明:文章转载自《react基础---react全家桶03》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用antd Table + mobx 处理数组 出现的一系列问题DDR工作原理【转】下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

React native路由跳转navigate、push、replace的区别

由于没有系统的去学习RN,对路由跳转了解不多,只是跟着项目在做,抽点时间简单学习一下RN路由跳转方法区别,总结如下: 如上图,外部是一个栈容器,此时A页面在最底部,navigate到B页面,为什么此时用navigate没有用push呢,因为在栈内没有B页面时,用navigate和push是一样的,都是进行入栈操作,没有区别,出于习惯使用navigate。...

npm install -g create-react-app MacOS 报错解决

macOS 安装create-react-app报错解决: sudo npm uninstall -g create-react-app //删除之前对镜像 npm config set registry https://registry.npm.taobao.org // 安装还是不成功直接切换成淘宝镜像安装 npm config get regist...

解决初次使用webpack+antd-mobile时css不生效的问题

前端这块,最火的是angular、react、vue。根据你具体的业务场景,选择合适的框架或者类库。以react为例,新建一个项目时, css组件按钮,图片轮播等组件,最好不要重复造轮子,选择业内规范的,拿来用就行。这里选了一个比较火的antd-mobile。类似移动端的 bootstrap,但是UI组件要比bootstr强大丰富,且专注于结合react使...

Antd Form表单中Input输入框 在IE9下按下任何按键都会报校验失败

antd Form表单中Input输入框 在IE9下按下任何按键都会报校验失败,导致输入框输入不了任何内容! 可能你的react及react-dom版本由于过高导致antd组件不能兼容,需要对react及react-dom进行降级处理; 在这里附上我的版本号: "antd": "^2.13.14", "react": "^16.2.0","react-d...

react工程化项目搭建主流技术 umi3.0(或者&amp;lt;3.0版本)+ dva + antd构建项目流程

umi+ dva + antd构建react工程项目(组件化开发搭建项目)1.官方网站安装node.js(并确保 node 版本是 10.13 或以上)2.先确保安装成功npm或者yarn3.npm i yarn tyarn -g (国内源)4.如果你没有 npx,需要先安装它,用于执行 node_modules 下的命令 yarn global add...

react hook+antd实现点击发送验证码功能

要实现的效果如图,点击发送验证码,文字变为60秒后重新发送,并且开始倒计时 这是写成一个组件格式component -> eidtPass.tsx import React, { useState } from 'react'import { Modal, Form, Input, notification } from 'antd'import...