Я использую response-router и Firebase для аутентификации. Для этого функция onButtonClick из файла Войти должна изменить состояние в App.js на истинное. Как это сделать? Может, кроме моей идеи есть еще способы?
App.js:
import React, { Component } from 'react';
import { BrowserRouter as Router, Route, Switch, Redirect } from 'react-router-dom';
....
import firebase from './firebase/firebase.js';
class App extends Component {
state = {
signedInStatus : false
};
render(){
const PrivateRoute = ({ component: Component, ...rest }) => (
<Route {...rest} render = {(props) => (
this.state.signedInStatus
? <Component {...props} />
: <Redirect to='/signIn' />
)} />
)
return(
<div>
<Header signedInStatus = {this.state.signedInStatus} />
<Router>
<Switch>
<Route exact path = "/" component = {SignIn}/>
<Route path = "/signIn" component = {SignIn}/>
<Route path = "/register" component = {Register} />
<PrivateRoute path = "/home" component = {Home} />
</Switch>
</Router>
</div>
);
}
}
export default App;
Второй файл обеспечивает работу с вводом информации для перехода в кабинет пользователя. SignIn.js:
import...
class SignIn extends Component {
state = {
email: '',
password: '',
};
onButtonClick = (event) =>{
event.preventDefault();
firebase.auth().signInWithEmailAndPassword(this.state.email, this.state.password)
.then((user) => {
this.props.history.push('/home')
console.info("ok") /// here i want add something to change
}) /// this.state.signedIn for true in App
.catch((error) => {
console.info(error);
alert(error);
});
}
onChangeInputEmail = (event) => {
this.setState({email: event.target.value})
};
onChangeInputPassword = (event) => {
this.setState({password: event.target.value})
};
render(){
return (
...
)
};
export default withRouter(SignIn);



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


вам нужно определить метод обновления состояния для App.js, затем вы можете передать реквизиты компонентам следующим образом
<Route
path='/signIn'
render = {(props) => <SignIn {...props} changeSignedInStatus = {this.changeSignedInStatus} />}
/>
Добро пожаловать, мой друг, рад помочь