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
已更改
。这会创建一个不必要的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存储中可用)