Я практикую React-Typescript. В моем приложении React я получил данные из json API-заполнителя и из этого API я хочу использовать широту и долготу географического местоположения и передать их в компонент My Map. В компоненте «Карта» я использовал google-map-react . Я успешно отобразил карту. В моем компоненте «Карта» я создал опору интерфейса, которая выглядит следующим образом:
export interface IMapProps {
geo: {
lat: number;
lng: number;
}
}
Если я сделал гео необязательным, например geo?:
Карта появилась, но если было сделано гео, я получил такую ошибку: Property 'geo' is missing in type '{}' but required in type 'IMapProps
. Кроме того, я не знаю, как использовать Props в TypeScript.
Это мой родительский компонент, из которого я получил данные и планирую передать компонент Map.
import React, { useEffect, useState } from 'react';
import Map from './Map'
export interface Data {
id: number;
name: string;
username: string;
email: string;
address: {
street: string;
suite: string;
city: string;
zipcode: number;
geo: {
lat: number;
lng: number;
};
};
phone: number;
website: string;
company: {
name: string;
catchPhrase: string;
bs: string;
};
};
const Parent = () => {
const [state, setState] = useState<Data[]>([])
useEffect(() => {
getData()
}, [])
const getData = async () => {
const response = await fetch("https://jsonplaceholder.typicode.com/users");
const data = await response.json();
console.log(data);
setState(data);
};
return (
<div>
{state.map(i => <Map geo={i.address.geo} />)} //IN HERE I am passing the props to the Map component. But after that I don't know how to use to porps in TypeScript
</div>
)
}
export default Parent
Это компонент My Map, в котором я бы люблю использовать свой реквизит.
import React, { useState } from 'react';
import GoogleMapReact from 'google-map-react';
import Marker from './Marker'
export interface IMapProps {
geo: {
lat: number;
lng: number;
}
}
const Maps = ({ geo }: IMapProps) => {
const [state, setstate] = useState(
{
center: {
lat: 60.1098678,
lng: 24.7385084
},
zoom: 7
}
)
return (
<div >
<div style={{ height: '100vh', width: '100%' }}>
<GoogleMapReact
bootstrapURLKeys={{ key: "**********" }}
defaultCenter={state.center}
defaultZoom={state.zoom}
>
<Marker
lat={state.center.lat}
lng={state.center.lng}
text="My Marker" />
</GoogleMapReact>
</div>
</div>
);
};
export default Maps;