Javascript React/Redux/React路由器-仅在首次访问路由或更改筛选器时调用API

Javascript React/Redux/React路由器-仅在首次访问路由或更改筛选器时调用API,javascript,reactjs,react-redux,react-router,Javascript,Reactjs,React Redux,React Router,是否只有在以下条件下才能运行props.fetchTransactions(): 当路线第一次导航到 如果props.filter已更改 目前,它在每次导航到路由时都会运行,因为react router会卸载并重新装载。这会创建一个不必要的API调用,因为它只是重新获取与我的Redux存储中已经存在的结果集完全相同的结果集 const TransactionListContainer = (props) => { useEffect(() => { if(

是否只有在以下条件下才能运行
props.fetchTransactions()

  • 当路线第一次导航到
  • 如果
    props.filter
    已更改
  • 目前,它在每次导航到路由时都会运行,因为react router会卸载并重新装载
    。这会创建一个不必要的API调用,因为它只是重新获取与我的Redux存储中已经存在的结果集完全相同的结果集

    
    
    const TransactionListContainer = (props) => {
        useEffect(() => {
            if(!props.isCached){
              props.fetchTransactions(props.filter.fields, props.filter.pagination);
            }
        },[props.filter, props.isCached]);
    
    }
    
    function mapStateToProps(state) {
      const isCached = state.transactions.length !== 0
      return { isCached }
    }
    
    export default connect(mapStateToProps)(TransactionListContainer)
    
    我能想到的唯一方法是将
    useffect
    连接到根
    中,使其位于路由器之外,但我不确定这是否是一个好方法,因为:

  • 它将在加载
    时调用API,即使用户正在查看不同的路由
  • 如果我需要对其他容器重复此操作,
    将很快变得杂乱无章
  • //应用程序根目录
    常量应用=()=>{
    返回(
    } />
    …其他路线。。。
    );
    }
    //容器
    const TransactionListContainer=(道具)=>{
    useffect(()=>{
    //只有在第一次访问路线或props.filter发生更改时,才会发生这种情况
    props.fetchTransactions(props.filter.fields、props.filter.pagination);
    },[props.filter]);
    //事务被传递到此容器
    //redux:道具。交易。我还没有包括在内
    //任何我认为不相关的代码
    //回答这个问题。
    }
    
    您可以提供一个标志变量,指示以前是否缓存了事务数据(在redux存储中可用)