当前位置: 首页 > 面试题库 >

反应:如何在将“ this.state.x”用于函数之前等待数据?

姚和顺
2023-03-14
问题内容

我目前正在学习React,对于新手来说有些东西不那么容易…

我有一个简单的组件renders(请注意,li由于 functiongetSlots,它呈现了一个数组):

render () {
    return (
        <ul>
          {this.getSlots(this.state.viewing).map(item => <li key={item}>{item}</li>)}
        </ul>
    )
  }

功能getSlots是:

constructor (props) {...}

getSlots (viewing) {

    SOME STUFF...

    const monday = this.state.house.monday

    return SOME STUFF...
  }

componentDidMount () {...}

render () {...}

关键是getSlots需要获取数据componendDidMount才能正常工作。实际上,这时getSlots不起作用(崩溃),因为它在获取数据之前运行(this.state.house.monday运行时为“空”)。

如何在运行之前等待数据被提取getSlots?感谢您的提示。


问题答案:

您将需要有条件地渲染。提供要在异步所需数据之前加载的加载状态。您将需要以下内容:

class WrapperComponent extends PureComponent {
    constructor(props) {
        super(props);

        this.state = {
            isLoaded: false,
            data: null
        };
    }

    componentDidMount() {
        MyApiCall.then(
            res => this.setState({
                // using spread operator, you will need transform-object-rest-spread from babel or
                // another transpiler to use this
                ...this.state, // spreading in state for future proofing
                isLoaded: true,
                data: res.data
            })
        );
    }

    render() {
        const { isLoaded, data } = this.state;
        return (
            {
                isLoaded ?
                    <PresentaionComponentThatRequiresAsyncData data={ data } /> :
                    <LoadingSpinner /> // or whatever loading state you want, could be null
            }
        );
    }
}


 类似资料:
  • 问题内容: 我正在尝试在Node.js / Express中创建一个路由,该路由从两个查询中读取数据,然后基于来自查询的数据来增加计数。由于Node.js是异步的,因此在读取所有数据之前会显示总计。 我创建了一个简单的示例,以达到我目前正在做的事情 我不确定要等到两个功能都完成后才能打印总计,我该做什么。我是否需要创建一个自定义事件发射器来实现这一目标? 问题答案: 拥抱异步性: 或使用Promi

  • 我对这段代码有一个问题,其中语句是在函数之前触发的,它返回0而不是正确的值。有没有办法在返回之前强制完成?我知道这是一个逻辑问题,因为如果我删除处的注释,它就可以正常工作。 如何在不使用或应用程序中的任何其他类型的超时?原始代码: 编辑代码: 这是StorageInformation类 从接口调用StorageInformation 我还尝试了r2rek的解决方案,得到了相同的结果 欢迎提出任何问

  • 嗨,我正在尝试模拟一个装配站,因此我想用一个等待块来协调我的材料的发布。我的流程包括以下步骤: 3种不同的路径:来源—— 模型 当所有代理到达他们的区块时,我想在他们的等待区块中释放我的代理。我现在面临的问题是,所有3个代理都在不同的时间到达。例如,代理1在等待区块1 10分钟后到达,代理2和3在区块2和3 5分钟后到达。所以代理1应该检查其他代理是否到达他们的区块,然后被释放。代理2和3也应该采

  • 问题内容: 这是我的情况: 在this.handleFormSubmit()上,我正在执行this.setState() 在this.handleFormSubmit()内部,我正在调用this.findRoutes(); -取决于this.setState()的成功完成 this.setState(); 在this.findRoutes被调用之前没有完成… 在调用this.findRoutes(

  • 是否可以使用等待与参数?例如: 即使是这样,似乎也不是最好的主意。以前有人这样做过吗?

  • 我正试图通过迁移当前使用Angular1/AngularJS编写的应用程序来提高我对Angular2的了解。 有一个特征特别难倒了我。我试图复制一个功能,其中调用函数等待继续,直到它正在调用的函数完成了一个循环的promise。在AngularJS中,我调用的函数基本上是这样的: 它包含一个调用另一个函数()的循环,该函数还返回一个promise,并将所有返回的promise存储在一个数组中。 使