1
私はReactとReact-Routerを使用して、ユーザーがWebアプリにログインしてからFacebookにログインしようとしています。ログインに成功したユーザーをリダイレクトするコンポーネントを作成しましたが、新しいビューでログアウトボタンを表示できません。私はReact-Routerも新しくなっていますので、問題が私のルートにあるかどうかは完全にはわかりません。ここに私のこれまでのコードだFacebookログインとReactJSでログインとログアウトを実装する方法は?
:
login.js
class Login extends React.Component{
constructor(props) {
super(props);
this.state = {
loggedStatus: false,
id : ''
}
}
componentDidMount() {
window.fbAsyncInit = function() {
window.FB.init({
appId : '',
cookie : true,
xfbml : true,
version : 'v2.11'
});
window.FB.getLoginStatus(function(response) {
this.statusChangeCallback(response);
}.bind(this));
}.bind(this);
(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.11&appId=''";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'))
}
loggedIn(response) {
this.setState({
loggedStatus : true,
id: response.authResponse.userID
});
}
loggedOut() {
this.setState({
loggedStatus: false,
})
}
statusChangeCallback(response) {
console.log('statusChangeCallback');
console.log(response);
if (response.status === 'connected') {
this.loggedIn(response)
console.log(this.state);
} else if (response.status === 'not_authorized') {
this.loggedOut()
console.log(this.state.loggedStatus);
} else {
this.loggedOut()
console.log(this.state.loggedStatus);
}
}
checkLoginState() {
window.FB.getLoginStatus(function(response) {
this.statusChangeCallback(response);
}.bind(this));
}
handleClick() {
window.FB.login(this.checkLoginState());
}
render() {
if (!this.state.loggedStatus) {
return (
<div className="fb-login-button"
data-max-rows="1"
data-size="large"
data-button-type="continue_with"
data-show-faces="false"
data-auto-logout-link="true"
data-use-continue-as="true">
</div> );
} else {
return (
<Redirect to = {{
pathname : '/loggedin',
state : {
id: this.state.id
}
}} />
)
}
}
}
export default Login;
loggedin.js
class UserLogin extends React.Component {
constructor(props) {
super(props);
this.state = {
id: this.props.location.state.id
}
}
render(){
return (
<div>Hey {this.state.id}!</div>
</div>)
}
}
export default UserLogin
そして、ここでは私のメインのアプリですが、App.js
class App extends React.Component {
render() {
return (
<Router>
<Switch path = '/'>
<Route path = '/login' component = {Login} />
<Route path = '/loggedin' component = {UserLogin} />
</Switch>
</Router>
);
}
};
export default App;
私はrenderメソッドを持っていない - 私は誤ってそれを編集したコードをコピーするとき ここに。私はそれで自分の投稿を編集しました。レンダリングボタンを押してもログイン後にログアウトボタンは表示されません。 – Wambui
問題が解決したら、これを試してください。私はスイッチがこの場合にrquiredとは思わない。別のケースでは 'switch'が使用されます。スイッチを使用する必要がある場合は、反応ルータガイドを参照してください。 – mohanpd