【问题标题】:Re-rendering Ionic React on a route ( don't want to reload the data )在路线上重新渲染 Ionic React(不想重新加载数据)
【发布时间】:2020-09-08 14:30:21
【问题描述】:

我正在尝试使用 Ionic React 构建应用程序。我的路由器有问题。

App.tsx

<IonRouterOutlet>
         <Route path="/stats" render={() => <Stats/>} exact={true} />
         <Route path="/orders" component={Orders} exact={true} />
         <Route path="/" render={() => <Redirect to="/stats" />} exact={true} /></IonRouterOutlet>  

在我的组件 Stats 中,我使用 useEffect 从 API 加载数据

 useEffect(() => {
   OrdersService.getOrders().then(resultat => {
     setDataOrders(resultat);
    });
     return function cleanup() {
       // Clean the data

     }


  }, []);

如果我转到我的组件订单并返回统计信息,请做出反应,不要从 API 重新加载数据。 您有任何解决方案来强制重新加载吗?

提前致谢。

【问题讨论】:

  • 嗯? “(不想重新加载数据)”然后有问题你说“你有什么解决方案来强制重新加载吗?”不知道你在这里问什么

标签: reactjs ionic-framework react-hooks router


【解决方案1】:

Ionic 的工作方式与您的预期不同,即使尚未输入路线,也会呈现路线。当您导航到新路线时,不会调用 useEffect 的清理功能。这是设计使然,因此当您在页面之间导航时,路线已经呈现并且很好。

您要使用的是useIonViewWillEnter钩子,它将在即将进入路由时调用。

import React, { useState } from "react";
import { useIonViewWillEnter } from "@ionic/react";

export const DataOrdersView = () => {
  const [dataOrders, setDataOrders] = useState([]);

  useIonViewWillEnter(() => {
    OrdersService.getOrders().then((resultat) => {
      setDataOrders(resultat);
    });
  });

  return <div>Your View</div>;
};

你可以在这里阅读更多, https://ionicframework.com/docs/react/lifecycle

【讨论】:

  • 非常感谢!现在工作正常!
  • 为什么会这样?这不会导致大量不必要的渲染并损害性能吗?此外,Dom 将充满不可见的、不相关的组件。
猜你喜欢
  • 1970-01-01
  • 2021-02-13
  • 1970-01-01
  • 1970-01-01
  • 2016-05-09
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 2019-06-18
相关资源
最近更新 更多