Я новичок в реакции и использую apis. Я установил инструмент с помощью: npm install --save реагировать-google-place-autocomplete и загрузил скрипт для API Google Maps с включенной библиотекой мест, в индекс. html файл.
На данный момент я добавил простой компонент GooglePlacesAutocomplete. На веб-сайте, когда я начинаю вводить свой родной город, миссиссауга, знак загрузки быстро появляется и исчезает, и я получаю сообщение об ошибке консоли:
"index. js: 1 Вы превысили суточную квоту на запрос для этот API. Если вы не установили пользовательскую ежедневную квоту запросов, убедитесь, что в вашем проекте активен платежный аккаунт: http://g.co/dev/maps-no-account Для получения дополнительной информации об ограничениях использования и службах API Карт Google JavaScript см. https://developers.google.com/maps/documentation/javascript/usage "
, даже когда я печатаю только первую букву. Однако, когда я набираю «los», я получаю ту же ошибку выше для первых двух букв, но я получаю подсказки местоположения, когда я набираю третью. Почему это?
Вот мой код:
import React from 'react';
import './SearchBar.css';
//Used to access google's location autocomplete api and its provided css
import GooglePlacesAutocomplete from 'react-google-places-autocomplete';
import 'react-google-places-autocomplete/dist/index.min.css';
class SearchBar extends React.Component {
constructor(props) {
super(props);
this.state = {
term:"",
location:"",
sortBy: "best_match"
}
this.handleTermChange = this.handleTermChange.bind(this);
this.handleLocationChange = this.handleLocationChange.bind(this);
this.handleSearch = this.handleSearch.bind(this);
this.handleSearchByEnter = this.handleSearchByEnter.bind(this);
//These are the options by which you can sort the returned Yelp object
this.sortByOptions = {
'Best Match': "best_match",
'Highest Rated': "rating",
'Most Reviewed': "review_count"
}
}
//Gets the CSS class for the sorting option
getSortByClass(sortByOption) {
if(this.state.sortBy === sortByOption) {
return 'active';
} else {
return '';
}
}
//This function automatically rerenders the business list when a new sort by option is chosen to reflect it.
handleSortByChange(sortByOption) {
//Recall setState is asynchronous, so include a callback function called with updated sortByOption,
this.setState({
sortBy: sortByOption,
}, ()=> {
this.props.searchYelp(this.state.term, this.state.location, this.state.sortBy);
})
}
handleTermChange(event) {
this.setState({
term: event.target.value
})
}
handleLocationChange(event) {
this.setState({
location: event.target.value
})
}
handleSearch(event) {
this.props.searchYelp(this.state.term, this.state.location, this.state.sortBy);
event.preventDefault();
}
handleSearchByEnter(event) {
if(event.which === 13) {
document.getElementById('submit').click();
}
}
renderSortByOptions() {
//Object.keys() returns array of property names
//Array.map() takes that array and returns another array of list elements with a key of that particular sortByOption
return Object.keys(this.sortByOptions).map(sortByOption=> {
let sortByOptionValue = this.sortByOptions[sortByOption];
//Keys are special react attributes that must be included when rendering list elements
return <li key={sortByOptionValue} className={this.getSortByClass(sortByOptionValue)} onClick={this.handleSortByChange.bind(this, sortByOptionValue)}>{sortByOption}</li>
});
}
render() {
return (
<div className="SearchBar" onKeyPress={this.handleSearchByEnter}>
<div className="SearchBar-sort-options">
<ul>
{this.renderSortByOptions()}
</ul>
</div>
<div className="SearchBar-fields">
<input placeholder="Search Businesses" onChange={this.handleTermChange}/>
<input id="location" placeholder="Where?" onChange={this.handleLocationChange}/>
</div>
<div>
<GooglePlacesAutocomplete/>
</div>
<div className="SearchBar-submit">
<a id="submit" onClick= {this.handleSearch}>Let's Go</a>
</div>
</div>
);
}
}
export default SearchBar;