javascript - 从异步服务器端数据调用渲染 ReactJS

标签 javascript asynchronous reactjs

我对 ReactJS 比较陌生。我真的很喜欢 React 呈现数据的方式。但是,当我开始使用异步调用来检索和呈现服务器端数据时,我发现有一些奇怪的行为。我有一个调用子组件并呈现服务器端数据的组件。

服务器端调用是异步调用。我的代码是这样的:

class myComponent extends component {

    constructor(props) {
        super(props);
        this.componentDidMount = this.componentDidMount.bind(this);
        this.state = {myVariable: []};

    }
    this.componentDidMount() {
        fetch() => { server side async call to retrieve data
        this.setState({myVariable: serverData});
    }

    render() {
        <div className="myClass">
            <div className="renderMyBox">
                <div> {this.state.myVariable} </div>
            </div>
        </div>
    }
}

我面临的问题是。前两个 div 立即在服务器上呈现,然后几乎有 1 秒的延迟,其中有一个空的 div,然后由于异步调用而设置状态。然后状态的变化触发重新渲染。

在异步调用成功并设置状态之前,有什么方法可以强制渲染不发生吗?有解决方法吗?

最佳答案

正如 elmaister 所指出的,在有数据之前您不能返回任何内容。这可以通过观察 isReady 变量来处理:

class myComponent extends component {

  constructor(props) {
    super(props);
    this.componentDidMount = this.componentDidMount.bind(this);
    this.state = { myVariable: [], isReady: false };
  }

  this.componentDidMount() {
    fetch() => { server side async call to retrieve data
      this.setState({
        myVariable: serverData,
        isReady: true
      });
    }

  render() {
    if (this.state.isReady) {
      return <div className="myClass">
        <div className="renderMyBox">
           <div> {this.state.myVariable} </div>
        </div>
      </div>
    }
  }

}

关于javascript - 从异步服务器端数据调用渲染 ReactJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39442505/

相关文章:

vb.net - 异步 PDF 创建的 IOException 问题

javascript - 如何迭代 JS 数组以在行中创建偶数列

javascript - Meteor - 检查是否有 2 个版本的 React 正在运行

javascript - 在 NPM 范围包中公开两个(或更多)Node.js Babel 类

javascript - NVD3.js:如何配置x轴或y轴值

javascript - 如何在 js 数组中搜索?

javascript - 在 promise 调用完成之前设置状态

javascript - 将 javascript 双按位转换为 C#

c# - 使用委托(delegate)异步调用方法是最佳实践吗?

c# - 如何在 C# 中管理混合的同步和异步进程?