| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
If you find this package helpful please give it a star because it hepls it grow and motivates us to build new features and support the old ones.
npm i react-google-autocomplete --save
or
yarn add react-google-autocomplete
As of version 1.2.4, you can now pass an apiKey prop to automatically load the Google maps scripts. The api key can be found in your google cloud console.. The places service hook requires both the Places API and Maps Javascript API to be enabled.
<Autocomplete
apiKey={YOUR_GOOGLE_MAPS_API_KEY}
onPlaceSelected={(place) => console.log(place)}
/>
or
const { ref } = usePlacesWidget({
apiKey: YOUR_GOOGLE_MAPS_API_KEY,
onPlaceSelected: (place) => console.log(place)
})
<AnyInput ref={ref} />Alternatively if not passing the apiKey prop, you can include google autocomplete link api in your app. Somewhere in index.html or somewhere else. More info here
<script
type="text/javascript"
src="https://maps.googleapis.com/maps/api/js?key=[YOUR_API_KEY]&libraries=places"
></script>This is a simple react component for working with google autocomplete
import Autocomplete from "react-google-autocomplete";
<Autocomplete
apiKey={YOUR_GOOGLE_MAPS_API_KEY}
onPlaceSelected={(place) => {
console.log(place);
}}
/>;apiKey: pass to automatically load the Google maps scripts. The api key can be found in your google cloud console.
ref: React ref to be assigned the underlying text input ref.
onPlaceSelected: (place: PlaceResult, inputRef, autocompleteRef) => void: The function gets invoked every time a user chooses location.
onLoadFailed: (error: Error | ErrorEvent) => void: Optional. The function gets invoked when the Google Maps script fails to load (e.g. it is blocked by an ad-blocker or CSP, the network is down, or a CDN/DNS error occurs) or when Google reports an authentication/quota failure via its global gm_authFailure callback (invalid API key, disabled billing, referrer restrictions, exceeded quota). When omitted, behavior is unchanged.
<ReactGoogleAutocomplete
apiKey={YOUR_GOOGLE_MAPS_API_KEY}
onPlaceSelected={(place) => console.log(place)}
onLoadFailed={(error) => console.error("Could not load Google Maps", error)}
/>options: Google autocomplete options.
inputAutocompleteValue: Autocomplete value to be set to the underlying input.
googleMapsScriptBaseUrl: Provide custom google maps url. By default https://maps.googleapis.com/maps/api/js
defaultValue prop is used for setting up the default value e.g defaultValue={'Amsterdam'}.
language: Set language to be used for the results. If not specified, Google defaults to load the most appropriate language based on the users location or browser setting.
libraries: prop is used for loading additional google libraries alongside the places api, defaultValue={["places"]}.
You can pass any prop specified for the hmtl input tag. You can also set options.fields prop if you need extra information, now it defaults to basic data in order to control expenses.
Is a hook that has a single config argument. It has exactly the same interface as ReactGoogleAutocomplete props. This hook is actually used in the ReactGoogleAutocomplete component.
import { usePlacesWidget } from "react-google-autocomplete";
export default () => {
const { ref, autocompleteRef } = usePlacesWidget({
apiKey:YOUR_GOOGLE_MAPS_API_KEY,
onPlaceSelected: (place) => {
console.log(place);
}
});
return <AnyInput ref={ref} {...anyOtherProp}>
}It has only one config argument which has propperties: apiKey, ref, onPlaceSelected, onLoadFailed, options, inputAutocompleteValue, googleMapsScriptBaseUrl. The same props described here
This hook returns object with only two properties:
This is an initial implementation of debounced google places autocomplete service. It gives you an option to reduce the amount of requests sent to google which reduce your costs. For the time being we decided to use lodash.debounce to save time and in the later versions we might write our own implementation of debounce with hooks. Because it uses lodash we also decided to not put it into the index library file so it lives in its own file and could be only imported by it.
import usePlacesService from "react-google-autocomplete/lib/usePlacesAutocompleteService";
export default () => {
const {
placesService,
placePredictions,
getPlacePredictions,
isPlacePredictionsLoading,
} = usePlacesService({
apiKey: process.env.REACT_APP_GOOGLE,
});
useEffect(() => {
// fetch place details for the first element in placePredictions array
if (placePredictions.length)
placesService?.getDetails(
{
placeId: placePredictions[0].place_id,
},
(placeDetails) => savePlaceDetailsToState(placeDetails)
);
}, [placePredictions]);
return (
<>
<Input
placeholder="Debounce 500 ms"
onChange={(evt) => {
getPlacePredictions({ input: evt.target.value });
}}
loading={isPlacePredictionsLoading}
/>
{placePredictions.map((item) => renderItem(item))}
</>
);
};The hook has only one config argument.
The hook returns an object with properties:
import Autocomplete from "react-google-autocomplete";
<Autocomplete
apiKey={YOUR_GOOGLE_MAPS_API_KEY}
style={{ width: "90%" }}
onPlaceSelected={(place) => {
console.log(place);
}}
options={{
types: ["(regions)"],
componentRestrictions: { country: "ru" },
}}
defaultValue="Amsterdam"
/>;or
import { usePlacesWidget } from "react-google-autocomplete";
export default () => {
const { ref } = usePlacesWidget({
apiKey: YOUR_GOOGLE_MAPS_API_KEY,
onPlaceSelected: (place) => {
console.log(place);
},
options: {
types: ["(regions)"],
componentRestrictions: { country: "ru" },
},
});
return <input ref={ref} style={{ width: "90%" }} defaultValue="Amsterdam" />;
};<Autocomplete
onPlaceSelected={(place, inputRef, autocomplete) => {
console.log(autocomplete);
}}
/>or
const { ref, autocompleteRef } = usePlacesWidget({
apiKey: YOUR_GOOGLE_MAPS_API_KEY,
onPlaceSelected: (place) => {
console.log(place);
},
});Formik example lives here
Debounce example lives here
We are planning on rewriting the library with TS/Flow in the later releases but you can already use it with TypeScript because we use declaration files.
If you would like to see something in this library please create an issue and I will implement it as soon as possible.
| Back | FazBrowse Home | New Git URL |