【前端知识】React 基础巩固(三十四)——组件中的异步操作及优化

这篇具有很好参考价值的文章主要介绍了【前端知识】React 基础巩固(三十四)——组件中的异步操作及优化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

React 基础巩固(三十四)——组件中的异步操作及优化

一、待优化的异步请求流程

【前端知识】React 基础巩固(三十四)——组件中的异步操作及优化,前端知识,React,前端,react.js,前端框架

  • 通过组件的生命周期来完成网络请求,网络请求的异步代码直接放在组件中
import React, { PureComponent } from "react";
import { connect } from "react-redux";
import {
  changeBannerAction,
  changeRecommendAction,
} from "../store/actionCreators";
import axios from "axios";

export class category extends PureComponent {
  componentDidMount() {
    axios.get("http://123.207.32.32:8000/home/multidata").then((res) => {
      console.log(res.data);
      const banners = res.data.data.banner.list;
      const recommends = res.data.data.recommend.list;
      console.log(banners, recommends);
      this.props.changeBanners(banners);
      this.props.changeRecommends(recommends);
    });
  }

  render() {
    return <div>category</div>;
  }
}

const mapDispatchToProps = (dispatch) => ({
  changeBanners(banners) {
    dispatch(changeBannerAction(banners));
  },
  changeRecommends(recommends) {
    dispatch(changeRecommendAction(recommends));
  },
});

export default connect(null, mapDispatchToProps)(category);

二、利用Redux优化异步网络请求

  • 通过redux来管理异步网络请求
    【前端知识】React 基础巩固(三十四)——组件中的异步操作及优化,前端知识,React,前端,react.js,前端框架

  • 在store中引入中间件redux-thunk

    import { createStore, applyMiddleware } from "redux";
    import reducer from "./reducer";
    import thunk from "redux-thunk";
    
    // 正常情况下,store.dispatch 只能派发对象
    // 想要派发函数,需要增强,使用 “redux-thunk”
    
    const store = createStore(reducer, applyMiddleware(thunk));
    
    export default store;
    
    
  • 构建fetchHomeMultidataAction,将原本在组件中的异步请求代码放入到actionCreators.js中

    import * as actionTypes from "./constants";
    import axios from "axios";
    
    export const addNumberAction = (num) => ({
      type: actionTypes.ADD_NUMBER,
      num,
    });
    
    export const subNumberAction = (num) => ({
      type: actionTypes.SUB_NUMBER,
      num,
    });
    
    export const changeBannerAction = (banners) => ({
      type: actionTypes.CHANGE_BANNERS,
      banners,
    });
    
    export const changeRecommendAction = (recommends) => ({
      type: actionTypes.CHANGE_RECOMMENDS,
      recommends,
    });
    
    export const fetchHomeMultidataAction = () => {
      return (dispatch, getState) => {
        // 异步操作
        axios.get("http://123.207.32.32:8000/home/multidata").then((res) => {
          const banners = res.data.data.banner.list;
          const recommends = res.data.data.recommend.list;
          dispatch(changeBannerAction(banners))
          dispatch(changeRecommendAction(recommends))
        });
      }
    };
    
    
  • 改写原来的category.jsx,派发异步请求的dispatch

    import React, { PureComponent } from "react";
    import { connect } from "react-redux";
    import { fetchHomeMultidataAction } from "../store/actionCreators";
    // import axios from "axios";
    
    export class category extends PureComponent {
      componentDidMount() {
        // axios.get("http://123.207.32.32:8000/home/multidata").then((res) => {
        //   console.log(res.data);
        //   const banners = res.data.data.banner.list;
        //   const recommends = res.data.data.recommend.list;
        //   console.log(banners, recommends);
        //   this.props.changeBanners(banners);
        //   this.props.changeRecommends(recommends);
        // });
    
        this.props.fetchHomeMultidata();
      }
    
      render() {
        const { banners, recommends } = this.props;
        return (
          <div>
            category
            <div className="banner">
              <h2>轮播图:</h2>
              <ul>
                {banners.map((item, index) => {
                  return <li key={index}>{item.title}</li>;
                })}
              </ul>
            </div>
            <div className="recommend">
              <h2>推荐数据:</h2>
              <ul>
                {recommends.map((item, index) => {
                  return <li key={index}>{item.title}</li>;
                })}
              </ul>
            </div>
          </div>
        );
      }
    }
    
    const mapStateToProps = (state) => ({
      counter: state.counter,
      banners: state.banners,
      recommends: state.recommends,
    });
    
    const mapDispatchToProps = (dispatch) => ({
      //   changeBanners(banners) {
      //     dispatch(changeBannerAction(banners));
      //   },
      //   changeRecommends(recommends) {
      //     dispatch(changeRecommendAction(recommends));
      //   },
      fetchHomeMultidata(recommends) {
        dispatch(fetchHomeMultidataAction(recommends));
      },
    });
    
    export default connect(mapStateToProps, mapDispatchToProps)(category);
    
    
    
  • 查看运行结果

【前端知识】React 基础巩固(三十四)——组件中的异步操作及优化,前端知识,React,前端,react.js,前端框架文章来源地址https://www.toymoban.com/news/detail-607742.html

到了这里,关于【前端知识】React 基础巩固(三十四)——组件中的异步操作及优化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【前端知识】React 基础巩固(三十三)——Redux的使用详解

    针对 React 基础巩固(三十二) 中的案例,我们希望抽取页面中共有的代码(例如下方的代码),使用高阶组件统一拦截。 为了让react和redux产生联系,安装一款工具 react-redux 使用 react-redux ,在index.js中统一注入store 新建about.js页面,通过 react-redux 引入store 在App.jsx中引入新的

    2024年02月15日
    浏览(39)
  • 【前端知识】React 基础巩固(三十九)——React-Router的基本使用

    Router中包含了对路径改变的监听,并且会将相应的路径传递给子组件。 Router包括两个API: BrowserRouter使用history模式 HashRouter使用hash模式(路径后面带有#号) 尝试在项目中使用HashRouter: 安装Router 在 index.js 中引入并使用HashRouter Routes:包裹所有的Route,在其中匹配一个路由(

    2024年02月14日
    浏览(40)
  • 【前端知识】React 基础巩固(三十二)——Redux的三大原则、使用流程及实践

    单一数据源 整个应用程序的state被存储在一颗object tree 中,并且这个object tree 只存储在一个store中; Redux并没有强制让我们不能创建多个Store,但是那样做不利于数据维护; 单一的数据源可以让整个应用程序的state变得方便维护、追踪、修改; State是只读的 唯一修改State的方法

    2024年02月15日
    浏览(42)
  • 【前端知识】React 基础巩固(十四)——JSX 的转换过程和声明式编程

    jsx 仅仅只是 React.createElement(component, props, …children)函数的语法糖 所有的 jsx 最终都会被转换成 React.createElement 的函数调用 createElement 需要传递三个参数: type 当前 ReactElement 的类型 如果是标签元素,那么就使用字符串表示 “div” 如果是组件元素,那么就直接使用组件的名称

    2024年02月09日
    浏览(68)
  • 【前端知识】React 基础巩固(三十一)——store数据的订阅和Redux的优化

    store/index.js test.js redux代码优化: 将派发的action生成过程放到一个actionCreators函数中 将定义的所有actionCreators的函数,放到一个独立的文件中:actionCreators.js actionCreators 和 reducer 函数中使用字符串常量是一致的,所以将常量抽取到一个独立的constants.js文件中 将reducer和默认值(

    2024年02月15日
    浏览(34)
  • 【前端知识】React 基础巩固(四十四)——其他Hooks(useContext、useReducer、useCallback)

    在类组件开发时,我们通过 类名.contextType = MyContext 的方式,在类中获取context,多个Context或者在函数式组件中通过 MyContext.Consumer 方式共享context: 可以看到,当我们需要使用多个Context时,存在大量繁琐的嵌套代码;而Context Hook能够让我们通过Hook直接获取某个Context的值,如

    2024年02月14日
    浏览(31)
  • 【前端知识】React 基础巩固(三十八)——log、thunk、applyMiddleware中间件的核心代码

    利用Monkey Patching,修改原有的程序逻辑,在调用dispatch的过程中,通过dispatchAndLog实现日志打印功能 redux中利用中间件 redux-thunk 可以让dispatch不不仅能处理对象,还能处理函数 单个调用函数来应用中间件,非常不方便,封装一个函数来合并中间件 在store/index.js中应用上面三个

    2024年02月14日
    浏览(34)
  • 【前端知识】React 基础巩固(十七)——组件化开发(一)

    什么是组件化开发? 分而治之的思想 将一个页面拆分成一个个小的功能块 将应用抽象成一颗组件树 React的组件相对于Vue更加的灵活和多样 按照不同的方式可以分为很多类组件 根据 组件的定义方式 ,分为: 函数组件 、 类组件 根据 组件内部是否有状态需要维护 ,分为:

    2024年02月12日
    浏览(50)
  • 【前端知识】React 基础巩固(十九)——组件化开发(三)

    Main.jsx TabControl/index.jsx TabControl/style.css

    2024年02月13日
    浏览(34)
  • 【前端知识】React 基础巩固(十三)——列表渲染

    在 React 中没有像 Vue 模块语法中的 v-for 指令,而是需要我们通过 JS 代码的方式组织数据,转成 JSX 在 React 中,展示列表最多的方式就是使用数组的 map 高阶函数 在展示数组前,有时会进行一些处理 过滤一些内容(filter 函数) 截取数组中的一部分内容(slice 函数) 列表中的

    2024年02月10日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包