0
votes

Est-ce la bonne utilisation des composants React?

Je suis nouveau sur React. Je souhaite partager mes fichiers de composants avec vous. Le code est syntaxiquement correct et s'exécute très bien. Je veux juste savoir si c'est logiquement correct et l'utilisation correcte de concepts tels que les états.

Est-il correct de sauvegarder les coordonnées lng et lat de l'API GeoLocation dans l'état de MapContainer?

Est-ce correct l'utilisation correcte de la fonction ComponentDidMount ().

De quelles autres manières puis-je améliorer le code.

// MapContainer.js
import React from 'react'
import 'bootstrap/dist/css/bootstrap.css';
import Map from './Map'

class MapContainer extends React.Component {
    constructor(props) {
        super(props);

        this.state = {
            center: {
                lat: 0, lng: 0
            }
        }

        this.getLocation = this.getLocation.bind(this);
        this.showPosition = this.showPosition.bind(this);
    }

    getLocation() {
        if (navigator.geolocation) {
          navigator.geolocation.getCurrentPosition(this.showPosition);
        } else {
            console.log("Geolocation is not supported by this browser.");
        }
    }

    showPosition(position) {
        this.setState({
            center: {
                lat: position.coords.latitude,
                lng: position.coords.longitude
            }
        });
    }

    componentDidMount() {
        this.getLocation();
    }

    render() {
        return (
            <div className="row">
                <div className="col-md-9">
                    <Map center={this.state.center} />
                </div>
                <div className="col-md-3 d-sm-none d-md-block d-none d-sm-block">
                    <h1>Menu</h1>
                </div>
            </div>
        );
    }
}

export default MapContainer

// Map.js
import React from 'react'
import 'bootstrap/dist/css/bootstrap.css';
import GoogleMapReact from 'google-map-react';


function Map(props) {
    const screenHeight = window.screen.height;
    return (
        <div style={{ height: screenHeight - 250 }}>
            <GoogleMapReact
                bootstrapURLKeys={{ key: "123mykey" }}
                center={props.center}
                defaultZoom={props.zoom}
            ></GoogleMapReact>
        </div>
    );
}

Map.defaultProps = {
    center: {
        lat: 59.95,
        lng: 30.33
    },
    zoom: 11
};

export default Map


0 commentaires

3 Réponses :


0
votes

Ça me va. Il vous suffit d'importer 'bootstrap / dist / css / bootstrap.css'; dans votre fichier principal index.js.


0 commentaires

0
votes

Tout semble bon, vous faites bien

Est-il correct de sauvegarder les coordonnées lng et lat de l'API GeoLocation dans l'état de MapContainer?

Est-ce l'utilisation correcte de la fonction ComponentDidMount ()?

Ouais, pourquoi pas?

De quelles autres manières puis-je améliorer le code.

il y a quelques changements mineurs comme:

1- vous pouvez importer Component en haut et la définition de classe serait plus petite

2- c'est une bonne pratique d'utiliser une définition de composant de fonction de flèche comme celle-ci

export default (props) => {
    const screenHeight = window.screen.height;
    return (
        <div style={{ height: screenHeight - 250 }}>
            <GoogleMapReact
                bootstrapURLKeys={{ key: "AIzaSyCV1fQD2VC6HoNbuuSPkE0q_QZvDf117PY" }}
                center={props.center}
                defaultZoom={props.zoom}
            ></GoogleMapReact>
        </div>
    );
}

généralement vous utilisez react de la bonne manière, continuez


0 commentaires

0
votes

Cela ressemble bien à MapContainer (Exemple 2) mais je propose de séparer vos logiques basées sur les vues et les autres. Par exemple, la fonction getLocation n'est pas basée sur votre vue (ne dépendant pas du composant React ou de la modification de la vue), nous pouvons donc brancher cette fonction logique dans une fonction indépendante plus tard le code showPosition fonction va utiliser cette fonction.


0 commentaires