【问题标题】:How to prevent rerenders with react-router-dom and react-redux when changing route?更改路由时如何防止使用 react-router-dom 和 react-redux 重新渲染?
【发布时间】:2021-11-16 19:31:28
【问题描述】:

我有这些路由器

function Rutas(){
  <Provider store={store}>
    <Router>
     <Switch>
      <Route exact path="/">
       <Home />
      </Route>
      <Route path="/about">
       <About />
      </Route>
     </Switch>
    </Router>
  </Provider>
}

这是我的侧边栏

function Home(){
 return (
   <>
    <NavLink to="/home">Home</NavLink>
    <NavLink to="/about">About</NavLink>
   </>
 )
}

这是 Home 组件

function Home(){
 const dispatch = useDispatch();
 const homeData = useSelector((data) => data.homeData);
 React.useEffect(() => dispatch(getHomeDataAction),[dispatch])

 return (
   <>
    {
     homeData.map((res) => <span>{res.title}</span>)
    }
   </>
 )
}

这是关于组件

function About(){
 const dispatch = useDispatch();
 const aboutData = useSelector((data) => data.aboutData);
 React.useEffect(() => dispatch(getAboutDataAction),[dispatch])

 return (
   <>
    {
     aboutData.map((res) => <span>{res.title}</span>)
    }
   </>
 )
}

在第一次渲染 Home 组件的页面加载时,没关系,当我将路由更改为 About 组件时,它也被渲染了,这没关系,但问题是当我再次将路由更改为 Home 组件时,它又被渲染了它调用 useEffect 并再次调度,我想防止在路线更改时再次调度,因为我有很多数据并且需要一段时间才能再次呈现来自 USESELECTOR 和 UI 的数据,它太慢了。

请告诉我一些解决方案或建议。

谢谢☺

【问题讨论】:

  • 以大写字母书写要求不会为您提供更快或更好的答案。相反,请尽量保持谦虚,整理您的想法并注意处理您的详细信息。

标签: javascript reactjs react-redux react-router react-router-dom


【解决方案1】:

您可以以某种方式记住 getHomeDataAction 操作是否已调度。

    const loadedData = useSelector((data) => data.homeData.loaded);
    React.useEffect(() => {
    if (!loadedData) {  
      dispatch(getHomeDataAction)
    } 

  },[dispatch, loadedData])

总而言之,有条件地调用getHomeDataAction 操作可能会有所帮助。 除了这些更改之外,您还应该扩展减速器。 在第一次调度 getHomeDataAction 操作后,loaded 属性的值应该变为 true。

【讨论】:

  • 我按照你展示的那样做,但是当我再次调度 getHomeDataAction 时,需要花费大量时间从 const aboutData = useSelector((data) => data.aboutData); 再次呈现数据;跨度>
猜你喜欢
  • 1970-01-01
  • 2021-08-13
  • 1970-01-01
  • 2019-06-04
  • 2021-05-03
  • 2019-04-28
  • 2021-01-23
  • 1970-01-01
  • 2016-09-05
相关资源
最近更新 更多