更新 React (Firebase) 中的状态未定义值

Posted

技术标签:

【中文标题】更新 React (Firebase) 中的状态未定义值【英文标题】:Update State in React (Firebase) Undefined Value 【发布时间】:2017-05-08 16:05:49 【问题描述】:

我正在使用 Firebase 创建登录页面。一旦用户登录,“auth”,firebase 就会返回一个“user”变量,我用它来让我知道是否将“loggedIn”的组件状态设置为 True 或 False。

auth 函数返回正确的“loggedin”和“loggedout”console.log 消息。但是,当它到达 setState 时,我不确定会发生什么。当我重新渲染时,我最初创建的登录状态(应该是 True 或 False)是“未定义”,这让我感到困惑。

class Navigation extends React.Component 
  static propTypes = 
    className: PropTypes.string,
  ;

  constructor(props) 
    super(props);
    this.state = 
      loggedIn: false
    
  

  componentDidMount() 
    firebase.auth().onAuthStateChanged(function(user) 
      if (user) 
        console.log("USER LOGGED IN :) Nav.js")
        console.log(user.email)
        this.setState(
          loggedIn: true
        );
       else 
        console.log("NOBODY'S HERE Nav.js")
        this.setState(
          loggedIn: false
        );
        // do not change state
      
    .bind(this));
  

  render() 
    console.log("CUR STATE: ", this.state.isLoggedIn)
    return (
      <div className=cx(s.root, this.props.className) role="navigation">
        <Navbar isLoggedIn=this.state.isLoggedIn/>
      </div>
    );
  

【问题讨论】:

【参考方案1】:

您将错误的状态变量传递给您的NavBar-组件。您正在像这样设置您的状态:

this.setState(
  loggedIn: false
);

但正在尝试在渲染函数中像这样使用它:isLoggedIn=this.state.isLoggedIn

这应该是:isLoggedIn=this.state.loggedIn

【讨论】:

以上是关于更新 React (Firebase) 中的状态未定义值的主要内容,如果未能解决你的问题,请参考以下文章

React.js - 功能组件中的状态未更新[重复]

Firebase/React/Redux 组件有奇怪的更新行为,状态应该没问题

状态更改后,上下文未更新 React Native 中的文本

状态更改时 React 组件未更新

错误:无法对未安装的组件执行 React 状态更新

无法使用 fetch POST 方法对未安装的组件执行 React 状态更新