问答

react 数据请求

作者:admin 2021-09-26 我要评论

action.js import actionTypes from "./actionTypes";import axios from "axios";export const getSeries = () = { return { type: actionTypes.SERIES_REQUEST,...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

action.js

import actionTypes from "./actionTypes";
import axios from "axios";

export const getSeries = () => {
  return {
    type: actionTypes.SERIES_REQUEST,
    payload: axios.get("/api/series.json")
  };
};
import React,{useEffect} from 'react';
import { useSelector, useDispatch, shallowEqual } from "react-redux";
import { getSeries } from "../../../actions/series";
export function Header() {
    const series = useSelector(state => state, shallowEqual);
     const dispath = useDispatch();
     
     useEffect(() => {
     //第一次请求
       dispath(getSeries());
     }, []);
    return (
        <div className="header"></div>
    );
}

export function Home() {
    const series = useSelector(state => state, shallowEqual);
     const dispath = useDispatch();
     useEffect(() => {
       //第二次请求
       dispath(getSeries());
     }, []);
    return (
        <div className="home"></div>
    );
}

遇到的问题 现在会发送两次相同的请求,浪费资源。

请问如何只发送一次请求,两个组件会使用同一份数据

###

可以看下:createGlobalState
提供一个对hooks友好,有十分轻便的方案,共享全局数据
HOC更适合Class组件

###

使用 HOC

const WithData = data => {
    return WrappedComponent => {
    
        // 在这里操作...
        
        render() {
            return <WrappedComponent />
        }
    }
}
WithData(data)(Home)
WithData(data)(Header)
###

可以将Header和Home函数组件改成 class组件的写

 // app.js
 class App extends React.Components {
 
    componentDidMount() {
        // 发起请求
        this.props.getSeries()
    }
 }
 

const mapDispatchToProps = {
    getSeries:getSeries
}

const mapStateToProps = (state, ownProps) => ({
 
});

export default connect(mapStateToProps, mapDispatchToProps)(App);
 // HeaderOrHome.js
 class HeaderOrHome extends React.Components {
 
    componentDidMount() {
     
    }
    state = {
        series:[]
    }
    static getDerivedStateFromProps(nextProps, prevState) {  
        // 请求到数据后,会改变 state.series
         return {  
            series:nextProps.series
         };  
    }
    
 }
 

const mapDispatchToProps = {
  
}

const mapStateToProps = (state, ownProps) => ({
    series:state.series
});

export default connect(mapStateToProps, mapDispatchToProps)(HeaderOrHome);
###

思路就是放在俩组件的顶层,HOC是一种方案。

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • react 数据请求

    react 数据请求

  • 大佬们 公众号网页怎么实现弹窗的授权

    大佬们 公众号网页怎么实现弹窗的授权

  • jvm有无内存泄露,举例子说明?

    jvm有无内存泄露,举例子说明?

  • pandas 重复行去除,列值合并怎么做?

    pandas 重复行去除,列值合并怎么做?

腾讯云代理商
海外云服务器