Я создаю приложение, которое будет генерировать предложение ужина для пользователей.Я успешно извлекать данные и выводить их.Но я очень застрял с фильтром.
Моя идея этого задания - создать Фильтр, чтобы пользователи могли выбирать кухню, а затем получать предложение на ужин.Я использую API Zomato для получения данных resutuanrt.Мне нужно передать
. Я понятия не имею, как передать kitchen_id из моего CusisineOption
компонента в мой FoodGuide
компонент.Мне нужно передать kitchen_id из моего CusisineOption
компонента (я также получаю идентификатор от Zomato) в мой FoodGuide
компонент.А затем используйте kitchen_id для получения файла JSON.
Я буду очень признателен, если кто-нибудь сможет помочь и дать мне несколько советов.Это мой код:
Компонент CusisineOption:
import React, { Component } from 'react';
import axios from 'axios';
import Aux from '../../hoc/Aux/Aux';
class Cuisines extends Component {
state = {
error: false,
optionList: [],
value: null
}
componentDidMount() {
const config = { headers: {'user-key': 'myAPIkey'} };s
axios.get(`https://developers.zomato.com/api/v2.1/cuisines?city_id=2891` , config)
.then(res => {
this.setState({optionList: res.data.cuisines})
console.log(this.state.optionList)
})
.catch(error => {
this.setState({error: true})
})
}
gotOption = (event) => {
this.setState({value: event.target.value})
console.log(this.state.value)
}
render() {
const CuisinesCopy = [...this.state.optionList]
const cuisineItems = CuisinesCopy.map((item) => {
return(
<option key={item.cuisine.cuisine_id.toString()} value={ item.cuisine.cuisine_id }>{item.cuisine.cuisine_name}</option>
)
})
return (
<Aux>
<p>Goddamnit! I am going to get the json data</p>
<select value={this.state.value} onChange={this.gotOption}>
<option value="1">--Please select a cusion--</option>
<option value="2">--Please select a cusion 2--</option>
{ cuisineItems }
</select>
</Aux>
)
}
}
export default Cuisines;
FoodGuide
компонент: значение - это значение, которое я хочу обновить с помощью kitchen_id
class FoodGuide extends Component {
state = {
names: [],
suggestion: null,
getList: false,
loading: false,
error: false,
changed: false,
value: "2",
list: []
}
componentDidMount() {
const config = { headers: {'user-key': 'APIKEY'} };
axios.get(`/search?entity_id=2891&entity_type=city&count=50&sort=rating$&cuisines=${this.props.value}` , config)
.then(res => {
this.setState({names: res.data.restaurants})
console.log(this.state.names)
})
.catch(error => {
this.setState({error: true})
})
}
getSuggestion = () => {
let rSuggestion;
if(this.state.names) {
let randomR = this.state.names[Math.floor(Math.random()*this.state.names.length)];
rSuggestion = randomR.restaurant.name
//console.log(randomR.restaurant.name)
this.setState({suggestion: rSuggestion})
}
return rSuggestion
}
getRestaurantList = () => {
let rData = <p>This is a suggestion</p>
if(this.state.getList) {
rData = this.state.names.map((r, i) => {
return(
<li key={i}>
<span>Name: { r.restaurant.name }</span>
</li>
)
})
}
return rData
}
getRestaurantsHandler = () => {
let rList = <p>Loading...</p>
if(this.state.names) {
this.setState({getList: true})
}
return rList
}
render () {
return (
<Aux>
<h2>Food Guide</h2>
<Cuisines />
<Suggestion suggested={ this.getSuggestion } suggestion={this.state.suggestion}/>
<RestaurantList getList={ this.getRestaurantsHandler } rList={ this.getRestaurantList() }/>
</Aux>
)
}
}
экспорт по умолчанию FoodGuide;