Новичок в React, поэтому с этим сложно бороться.
Я хочу изменить список на основе выбранной категории, однако компонент Категории вызывается компонентом Listing, который вызывается компонентом App.
-App.js
-Listing.js
-Categories.js
Я изначально устанавливаю состояние selectedCategory в файле app.js, и оно работает как положено, однако я хочу обновить это состояние.Я могу обновить состояние в компоненте категорий, но это только обновляет состояние элемента <Category>
.Я хочу обновить состояние «глобально», чтобы иметь к нему доступ везде.
Вот компонент Categories.js:
import React, { Component } from 'react';
class Categories extends Component {
handleCategoryClick = (id, e) => {
console.log(id);
this.setState({ selectedCategory:id });
}
render() {
return (
<div className="tour-categories">
<ul className="tour-categories-list">
<li onClick={(e) => this.handleCategoryClick(1, e)}>Food & Drink</li>
<li onClick={(e) => this.handleCategoryClick(2, e)}>Whisky Distilleries</li>
<li onClick={(e) => this.handleCategoryClick(3, e)}>TV & Film Location</li>
<li onClick={(e) => this.handleCategoryClick(4, e)}>City Tour</li>
<li onClick={(e) => this.handleCategoryClick(5, e)}>Castles</li>
<li onClick={(e) => this.handleCategoryClick(6, e)}>Golf </li>
<li onClick={(e) => this.handleCategoryClick(7, e)}>Shopping</li>
<li onClick={(e) => this.handleCategoryClick(8, e)}>Out Door Activities</li>
<li onClick={(e) => this.handleCategoryClick(9, e)}>Spa & Wellness</li>
<li onClick={(e) => this.handleCategoryClick(10, e)}>Boat Tours & Water Sports</li>
<li onClick={(e) => this.handleCategoryClick(11, e)}>Zoo & Aquariums</li>
</ul>
</div>
)
}
}
export default Categories;
Компонент Listing.js:
import React, { Component } from 'react';
import Categories from './Categories.js';
class Listing extends Component {
render() {
return (
<div>
<Categories />
</div>
)
}
}
export default Listing;
И компонент App.js (соответствующая часть)
class App extends Component {
state = {
tours: {},
selectedCategory: ""
};
loadData() {
fetch(API)
.then(response => response.json())
.then(json => {
console.log(json);
this.setState({
tours: json
});
})
}
componentDidMount() {
this.loadData();
}
render() {
return (
<div className="tour-container">
<Listing />
</div>
);
}
}
export default App;
Спасибо.