Я использую контекстный API для управления состоянием в приложении React, и я ищу способ получить доступ к состоянию в функции без сохранения состояния из моего класса Provider.
Я знаком с оберткой тегов Consumer вокруг JSX внутри render (), но в этом случае я не возвращаю JSX
app.js
export default class App extends Component {
render() {
return (
<BrowserRouter>
<Provider>
<Header />
<Switch>
<PrivateRoute path='/test' component={test} />
</Switch>
</Provider>
</BrowserRouter>
);
};
};
/context/index.js (класс поставщика)
import React, { Component } from 'react';
import axios from 'axios';
import {withRouter} from 'react-router';
const AuthContext = React.createContext();
class Provider extends Component {
state ={
firstName: '',
lastName:'',
emailAddress: '',
password: '',
signedIn: false,
};
render(){
return (
<AuthContext.Provider value = {{
user: {...this.state},
}}>
{this.props.children}
</AuthContext.Provider>
);
};
};
export default withRouter(Provider);
export const Consumer = AuthContext.Consumer;
PrivateRoute.js
import React from 'react';
import { Route } from 'react-router-dom';
const PrivateRoute = ({ component: Component, ...rest}) => {
<Route {...rest} render = {() => (
/* I NEED TO CHECK IF USER IS SIGNED IN. HOW DO I ACCESS this.state.signedIn from within the Provider class? */
)} />
}
export default PrivateRoute
Я работаю над компонентом, которому требуется аутентификация перед доступом к маршруту, но сначала мне нужно выяснить, как вывести состояние из класса Provider в PrivateRoute.js