Я пытался добавить управление состоянием в свое приложение реагирования, используя React ContextAPI, но столкнулся с проблемой. Я использую компоненты класса, идея заключается в том, чтобы получить данные из компонента, использующего Ax ios, и передать данные на приборную панель для обобщения данных.
Компонент A -> Компонент поставщика
Компонент B -> Потребительский компонент
Компонент C -> Панель инструментов -> Потребляющий компонентB
Когда я просматриваю панель мониторинга, значение состояния всегда становится неопределенным. Любые предложения о том, как я могу решить эту проблему? Благодарим вас за помощь.
пакет. json "реагировать": "^ 16.12.0", "реагировать-дом": "^ 16.12.0", "реагировать-маршрутизатор-дом": "^ 5.1 .2 "," response-scripts ":" 3.3.0 ",
Приложение. js
import React, { Component } from "react";
import "./App.css";
import { Route, Switch } from "react-router-dom";
import Dashboard from "./components/dashboard";
import ComponentA from "./components/a"
import "rsuite/dist/styles/rsuite-default.min.css";
import SomeContext from "./context/context.js";
class App extends Component {
state = {};
render() {
return (
<React.Fragment>
<Sidebar />
<Switch>
<Route path="/dashboard" component={Dashboard} />
<Route path="/a" component={ComponentA} />
</Switch>
</React.Fragment>
);
}
}
export default App;
SomeContext. js
import React from "react";
const SomeContext = React.createContext();
SomeContext.displayName = "SomeContext";
export default SomeContext;
Компонент A -> Компонент поставщика
import React, { Component } from "react";
import axios from "axios";
import { Card, CardHeader, Table, Container, Row } from "reactstrap";
import SomeContext from "./context/context.js";
class ComponentA extends Component {
state = {
posts: [],
};
async componentDidMount() {
const { data: posts } = await axios.get("http://localhost:5000/api");
this.setState({ posts });
console.log(posts);
}
render() {
return (
<div className="main-content" ref="main-content">
<Container fluid>
<SomeContext.Provider value={{ state:this.state }}>
<ComponentB/>
**.....Some component code **
</SomeContext.Provider>
</Container>
</div>
);
}
}
export default ComponentA;
Компонент B - Использование данных от Компонента A
import React, { Component } from "react";
import SomeContext from "./context/context.js";
class ComponentB extends Component {
static contextType = SomeContext;
render() {
return (
<SomeContext.Consumer>
{(dashboard) => (
<div>Data: {dashboard} {console.log(dashboard)} </div>
)}
</SomeContext.Consumer>
);
}
}
export default ComponentB;
Панель инструментов
import React, { Component } from "react";
import ComponentB from "./components/b";
class Dashboard extends Component {
render() {
return (
<div className="main-content">
<ComponentB />
</div>
);
}
}
export default Dashboard;