Если вы хотите использовать крючки, они предназначены для функциональных компонентов.Например:
import React, { useContext } from 'react';
import { AppContext } from './App';
const Main = () => {
const value = useContext(AppContext);
return(
<div>Main Component</div>
);
}
Если вы хотите использовать его в компоненте на основе классов, просто установите его как статический contextType в своем классе, а затем вы можете использовать его с this.context
в своем компоненте следующим образом:
import React from 'react';
import { AppContext } from './App';
class Main extends React.Component(){
static contextType = AppContext;
componentDidMount(){
const value = this.context;
}
render(){
return (
<div>Main Component</div>
)
}
}
Редактировать: удалить свой контекст из компонента приложения и поместить его в свой собственный компонент.Я думаю, что вы получаете конфликты при экспорте контекста.
, поэтому ваш компонент приложения должен выглядеть так:
import React from "react";
import Context from "./Context";
import Main from "./Main";
class App extends React.Component {
render() {
return (
<Context>
<Main />
</Context>
);
}
}
export default App;
Ваш основной компонент должен выглядеть так:
import React from "react";
import { AppContext } from "./Context";
class Main extends React.Component {
static contextType = AppContext;
render() {
return <div>{this.context.name}</div>;
}
}
export default Main;
и ваш контекстный компонент должен выглядеть следующим образом:
import React from "react";
export const AppContext = React.createContext();
class Context extends React.Component {
state = {
name: "John"
};
//Now you can place all of your logic here
//instead of cluttering your app component
//using this components state as your context value
//allows you to easily write funcitons to change
//your context just using the native setState
//you can also place functions in your context value
//to call from anywhere in your app
render() {
return (
<AppContext.Provider value={this.state}>
{this.props.children}
</AppContext.Provider>
);
}
}
export default Context;
Вот песочница, чтобы показать вам, как она работает CodSandbox