为什么setTimeout返回数字值

时间:2018-10-24 20:31:04

标签: javascript reactjs

仅当后端没有任何内容时,我才尝试获取 没有列表项 。现在,在加载时,在获取数据之前,我得到了加载微调器和 无列表项

所以,我想我应该添加一个超时来处理此问题,以便它仅在获取完成后才会显示,并且没有项目

 getList() {
        if(this.state.list.length != 0){
            return (this.state.list.map(data => {
              return <div data={data} key={data.id}/>
            }))
        }else{
            return <div>No List items</div>
        }
    }

render() {
        return (
            <div>  
                <Spinner active={this.state.active} />
                <div>{setTimeout(this.getList, 1000)}</div>
            </div>
        );
    }
}

当我使用它时,我正在浏览器上获取数字。微调器的活动状态在componentDidMount上更改为false

3 个答案:

答案 0 :(得分:3)

这就是setTimeout返回的:一个ID号,如果您想取消超时,可以在以后使用。

render方法是同步的。如果您不想在没有数据的情况下不渲染任何内容,则可以使渲染返回null。然后在componentDidMount中,执行所需的任何异步工作,完成后,调用this.setState更新状态并重新呈现(这次不带null

答案 1 :(得分:1)

不要在这里使用超时。我只是将list的初始状态设置为null。然后,只需翻转逻辑即可:

getList() {
        if(this.state.list && this.state.list.length == 0){
            return <div> No List items </div>
        }else{
            return (this.state.list.map(data => {
              return <div data={data} key={data.id}/>
            }))
        }
    }

有100种方法可以解决此问题,但这是基于您的代码最简单的方法。也不要忘记!=和!==之间的区别。

答案 2 :(得分:1)

class Items extends React.Component {
    constructor(props) {
        super();
        this.state = {
            active: true,
            is_loading: false,
        }
    }

    componentDidMount() {
        this.timeout_number = setTimeout(() => {
            this.setState({
                active: false,
                is_loading: true
            });
        }, 1000);
    }

    componentWillUnmount() {
        clearTimeout(this.timeout_number);
    }

    getList() {
        if(this.state.list.length) 
            return this.state.list.map(data => <div data={data} key={data.id}/>)
        else
            return <div>No List items</div>
    }

    render() {
        return (
            <div>  
                <Spinner active={this.state.active} />
                {this.state.is_loading 
                    ? this.getList() 
                    : null}
            </div>
        );
    }
}

export default Items;