Получает местоположение при монтировании компонента и переходит в состояние приложения в Ionic React

#reactjs #ionic-framework #ionic5

#reactjs #ionic-framework #ionic5

Вопрос:

Я хочу получить местоположение и перейти в состояние в ionic-React

Файл App.tsx. Я хочу вызвать функцию при монтировании приложения, чтобы запрашивать доступ к местоположению

 import React, { useEffect, useState } from "react";
import { Redirect, Route } from "react-router-dom";
import { IonApp, IonRouterOutlet, IonSplitPane } from "@ionic/react";
import { IonReactRouter } from "@ionic/react-router";
import { Geolocation } from "@ionic-native/geolocation";
import { setupConfig } from "@ionic/react";
import { Plugins, Capacitor } from "@capacitor/core";
import { useHistory } from "react-router-dom";
import Home from "./pages/Home/Home";

/* Core CSS required for Ionic components to work properly */
import "@ionic/react/css/core.css";

/* Basic CSS for apps built with Ionic */
import "@ionic/react/css/normalize.css";
import "@ionic/react/css/structure.css";
import "@ionic/react/css/typography.css";

/* Optional CSS utils that can be commented out */
import "@ionic/react/css/padding.css";
import "@ionic/react/css/float-elements.css";
import "@ionic/react/css/text-alignment.css";
import "@ionic/react/css/text-transformation.css";
import "@ionic/react/css/flex-utils.css";
import "@ionic/react/css/display.css";
import "../src/utils/spacing.css";

/* Theme variables */
import "./theme/variables.css";

/* Components */
import Dashboard from "./pages/Dashboard/Dashboard";
import SideMenu from "./components/SideMenu/SideMenu";
import LoginPage from "./pages/Login/Login";
import SignupPage from "./pages/Signup/Signup";
import Create from "./pages/Create/Create";
import Edit from "./pages/Edit/Edit";

setupConfig({
  hardwareBackButton: false,
});

const App: React.FC = () => {
  const [location, setLocation] = useState<object>({ long: "", lat: "" });
  const history = useHistory();

  const getBackButton = () => {
    if (Capacitor.isNative) {
      Plugins.App.addListener("backButton", (e) => {
        if (
          window.location.pathname === "/dashboard/Home" ||
          window.location.pathname === "/"
        ) {
          Plugins.App.exitApp();
        } else if (window.location.pathname === "/dashboard/") {
          history.push("/dashboard/");
        } else {
          history.goBack();
        }
      });
    }
  };

  const getLocation = async () => {
    try {
      const yourLocation = await Geolocation.getCurrentPosition();
      const lat = yourLocation.coords.latitude;
      const long = yourLocation.coords.longitude;
      alert(JSON.stringify(location, null, 2));
      setLocation({
        long,
        lat,
      });
      console.log(location);
    } catch (error) {
      alert(error);
      console.log(error);
    }
  };

  getLocation();

  useEffect(() => {
    getBackButton();
  }, []); // eslint-disable-line

  return (
    <IonApp>
      <IonReactRouter>
        <IonSplitPane contentId="main">
          <SideMenu />
          <IonRouterOutlet id="main">
            <Route path="/dashboard/:name" component={Dashboard} exact />
            <Route path="/dashboard/Edit/:id" component={Edit} exact />
            <Route path="/login" component={LoginPage} exact />
            <Route path="/create" component={Create} exact />
            <Route path="/signup" component={SignupPage} exact />
            <Route path="/" component={Home} exact />
            <Redirect from="/dashboard" to="/dashboard/Home" exact />
          </IonRouterOutlet>
        </IonSplitPane>
      </IonReactRouter>
    </IonApp>
  );
};

export default App;
 

Я хочу установить полученное местоположение в состояние приложения под названием location.

Я получаю сообщение об ошибке, ionic config was already initialized и данные не проходят.

когда я вызываю функцию, она запускается и всегда выдает эту ошибку

 ionic config was already initialized
 

Комментарии:

1. можете ли вы предоставить фактическое сообщение об ошибке с консоли. журнал и весь код для настройки функций, в которые вы импортировали плагин

2. пожалуйста, проверьте еще раз, я обновил его

Ответ №1:

вы должны использовать плагин capacitor для геолокации… https://capacitorjs.com/docs/apis/geolocation

 import { Plugins } from '@capacitor/core';

const { Geolocation } = Plugins;

class GeolocationExample {
  async getCurrentPosition() {
    const coordinates = await Geolocation.getCurrentPosition();
    console.log('Current', coordinates);
  }

  watchPosition() {
    const wait = Geolocation.watchPosition({}, (position, err) => {
    })
  }
}
``
 

Комментарии:

1. Как насчет передачи его в состояние местоположения

2. Вы также только что показали его объявление, как мне его назвать, это в useEffect?