javascript - Firebase - onAuthStateChanged 2 秒延迟。添加加载文本/微调器

标签 javascript reactjs firebase firebase-authentication

我使用 React + firebase 创建了一个待办事项列表。用户注册并登录后,他们可以访问他们的待办事项列表,但登录后,如果您刷新页面,onAuthStateChange 检查他们是否已登录需要 2/3 秒,这意味着他们会看到登录屏幕几秒钟后就会看到他们的待办事项列表。

我希望有一个简单的方法来添加加载文本/旋转器等待刷新的 2/3 秒?

JS

class App extends React.Component {
  constructor() {
    super();

    this.state = {
      toDo: [],
      loggedIn: false
    }

    this.addToDo = this.addToDo.bind(this);
    this.deleteToDo = this.deleteToDo.bind(this);
  }
  componentDidMount() {
    firebase.auth().onAuthStateChanged((user) => {
      if(user) {
        const dbRef = firebase.database().ref(`users/${user.uid}`);
        dbRef.on("value", (res) => {
          const toDoArr = [];
          let toDoObj = res.val();
          for(let objKey in toDoObj) {
            toDoObj[objKey].key = objKey;
            toDoArr.push(toDoObj[objKey]);
          }
          this.setState({
            toDo: toDoArr,
            loggedIn: true
          });
        });
      } else {
        this.setState({
          loggedIn: false,
          toDo: []
        })
      }
    });
  }

最佳答案

您可以将 loading 属性作为状态的一部分。像这样的事情

constructor() {
  // .....
  this.state = {
    loading: true,
    toDo: [],
    loggedIn: false
  }
}

从状态加载可以用这种方式渲染

render() {
  if (this.state.loading){
    return <Loading>My sweet spinner</Loading>;
  }
  // .... rest of the render 
}

class App extends React.Component {
  constructor(props){
    super(props);
    this.state = {
      loading: true,
      name: ''
    };
  }
  componentDidMount() {
    setTimeout(function() {
      this.setState({
        loading: false,
        name: 'Stackoverflow'
      });
    }.bind(this), 2000);
  }
  render() {
    if(this.state.loading){
      return <div> Loading ... </div>;
    }
    return <div>This is {this.state.name}</div>;
  }
}
ReactDOM.render(<App />, document.getElementById('app'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="app"></div>

关于javascript - Firebase - onAuthStateChanged 2 秒延迟。添加加载文本/微调器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44617280/

相关文章:

javascript - Content-Security-Policy 和外部 Javascript 文件

javascript - 代码在 localhost 中工作,但在 hostgator 服务器中不起作用?

javascript - React 16 setstate in componentdidmount 但抛出 null 错误

java - 具有 firebase 依赖项的 Android gradle 构建有警告(忽略 httpclient)

android - SHA 证书 firebase 调试/发布

javascript - 如何在 RequireJS 模块中进行异步初始化

javascript - 使用 React 状态隐藏组件 onClick

reactjs - 将分页与react-bootstrap表一起使用

javascript - 在 React 中返回数组时如何添加换行符?

swift - 使用 Firebase 搜索用户引擎