firebase로 간단한 앱을 구축하여 반응 라우터 (v4)를 배우려고하는데, 내가하고있는 일은 firebase를 사용하여 google을 사용하여 사용자가 로그인 할 때 다른 구성 요소로 리디렉션되고 루트로 이동할 때입니다. 경로 다시 '/'더 이상 내가반응 라우터 루트에 소품을 통과시키는 방법은 무엇입니까?
내 첫 번째 문제는 사용자가로 리디렉션됩니다 성공적인 인증에 두 가지 문제가
을 (내가 상태를 기준으로 리디렉션하여이 일을하고) 로그인을 볼 수 없습니다/예상대로 대시 보드로 돌아가거나 루트 경로를 다시 입력하면 로그인 페이지가 간략하게 표시되고 리디렉션됩니다. 내 방법이 충분히 빠르기 때문에 생각하지 않습니다. componentWillMount();
내 두 번째 문제는 대시 보드에 일부 소품을 전달하고 싶지만 인터넷에서 검색하고 찾고있는 방법을 모르지만 구현 방법을 모릅니다.
이것은 내 login.js입니다. 대시 보드에 currentUser를 전달하고 사용자가 로그인 경로로 돌아가서 로그인 한 경우 로그인 페이지를 표시하지 않고 충분히 빠르게 리디렉션하고 싶습니다. ...
state = {
currentUser: null,
successLogin: false
}
googleAuth =() => {
auth.signInWithPopup(provider).then(response => {
const token = response.credential.accessToken;
const currentUser = response.user;
}).catch(error => {
console.log(error.code , 'occured');
})
}
// firebase.auth().signInWithPopup(provider).then(function(result) {
// var token = result.credential.accessToken;
// var user = result.user;
// }).catch(function(error) {
// var errorCode = error.code;
// var errorMessage = error.message;
// var email = error.email;
// var credential = error.credential;
// });
componentDidMount() {
auth.onAuthStateChanged(user => {
if(user) {
console.log('a user was successfuly logged in')
this.setState({
currentUser: user.displayName,
successLogin: true
})
} else {
console.log('eerror')
}
})
}
componentDidUpdate() {
if(this.state.successLogin){
this.props.history.replace("/dashboard");
} else {
console.log('not a successful login');
}
}
componentWillMount() {
if(this.state.successLogin){
<Redirect to="/dashboard"/>
}
}
여기 내 로그인 상태에서 현재 사용자 상태를 가져 오는 방법을 모르기 때문에 사용자를위한 새로운 상태를 만드는 대시 보드입니다 ...
(210)state = {
user: null
}
componentDidMount(){
auth.onAuthStateChanged(user => {
this.setState({
user: user.displayName
})
})
}
render(){
const { user } = this.state;
return (
<h1> DashBoard {user}</h1>
)
}
}
이 내 routes.js
<BrowserRouter>
<div>
<Switch>
<Route path='/' exact component={Login} />
<Route path='/register' component={Register} />
<Route path='/dashboard' component={MainDashBoard} />
</Switch>
</div>
</BrowserRouter>
내가 REDUX을 사용할 수 있습니다하지만 난 아직 REDUX에 뛰어하지 않으려는 것을 알고
....
실제보다 훨씬 복잡해 보입니다. 너를 협박시키지 마라. 라우터에 대한 학습을 계속하고 코드 덩어리가 반복 될 때까지 토끼의 구멍을 내려 가지 마십시오. 라우팅은 hocs를 최적화하기 전에 오랫동안 편안하게 사용해야하는 토대입니다. –
이 작업을 훨씬 간단하게 수행 할 수있었습니다. 공용 경로의 경우 렌더 소품을 사용할 수 있습니다. 방문 페이지 경로에 숫자 5를 전달하려고한다고 가정 해 보겠습니다. ''' } />''붐! –