javascript - React - 父级未将方法传递给子级

标签 javascript reactjs firebase firebase-authentication

我有一个 React/Firebase 应用程序。我正在尝试制作一个使用 google 登录进行 firebase 身份验证的按钮。

当从登录方法所在的 App.js 渲染时,我的按钮工作正常。当我尝试从登录组件调用它时,没有任何反应,没有错误,什么也没有

App.js

import React, { Component } from 'react';
import { BrowserRouter as Router, Route, Redirect } from 'react-router-dom';
import Status from './status';
import Login from './login';
import Navigation from './navigation';
import { auth, provider } from '../firebase';

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      authUser: null
    };
  }

  componentDidMount() {
    auth.onAuthStateChanged((authUser) => {
      if (authUser) {
        this.setState({ authUser });
      } 
    });
  }

  login = () => {
    auth.signInWithPopup(provider)
      .then( (result) => {
        const user = result.user;
        this.setState({
          authUser: user
        });
      })
      .catch( (err) => {
        console.log('Error Logging In', err);
      });
  }

  logout = () => {
    auth.signOut()
    .then(() => {
      this.setState({
        authUser: null
      });
    });
  }

  render() {
    return (
      <Router>
        <div className="App">
          <Navigation user={this.state.authUser} />

          ...

          <Route path='/auth' exact render={() => this.state.authUser ? <Redirect to='/status'/> : <Login authUser={this.state.authUser} login={this.login}/> }/>

          ...

          </div>
        </div>
      </Router>
    );
  }
}

登录.jsx

import React, { Component } from 'react';

class Login extends Component {
  render() {
    return (
      <div className="container">
        <button className="btn btn-primary" onClick={this.login}><i className="fab fa-google"></i> Sign In with Google</button>
      </div>
    );
  }
}

知道我哪里出错了。我很确定我在 parent 和 child 之间错误地传递了东西。我在构造函数中以及传递给子级时尝试了不同的绑定(bind)方法。

最佳答案

您将登录作为 Prop 传递,您也应该将其作为 Prop 访问。

onClick 应该以 this.props.login 的形式访问它

<button className="btn btn-primary" onClick={this.props.login}><i className="fab fa-google"></i> Sign In with Google</button>

关于javascript - React - 父级未将方法传递给子级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50894210/

相关文章:

javascript - Socket.io 在处理模块时遇到一些问题

javascript - Angular 库 Node 模块

javascript - 删除处于 react 状态的数组的第一项

javascript - 创建 promise 回调

android - 用户 ID 的 Firebase 远程配置条件

javascript - laravel ajax 表单不会执行提交按钮

javascript - 创建可变大小的对齐文本 block

javascript - 为什么 slice() 在函数中使用时会改变状态

javascript - React 数组中对象的 .map

javascript - 为什么我无法将此代码部署到 firebase 函数?我不明白这个错误