在等待在 ReactJS 渲染中获取数据时显示加载微调器

Posted

技术标签:

【中文标题】在等待在 ReactJS 渲染中获取数据时显示加载微调器【英文标题】:Show loading spinner while waiting for data to be fetched in ReactJS render 【发布时间】:2017-03-16 00:28:08 【问题描述】:

我正在尝试编写 ReactJS 组件,该组件将显示由状态中加载的标志切换的 2 种视图类型。我问的是加载器微调器,但考虑到基于该标志显示 2 个不同的 DOM 树,这个问题可能会更复杂。我真的很想让我的代码尽可能清晰。

我想到的是两种写法:

第一种方式对我来说非常直观但不可读 + 我必须在 else 语句中添加另一个包装 div:

render() 
    return (
        <div>
            !this.state.loaded ? <Loader /> : (
                <div>
                    <Arrow direction="left" onClick=this.slideLeft/>
                    <ul>
                        
                            this.props.images.map((image, index) => 
                                return (
                                    <li key=index styleName=index === this.state.active ? 'active' : ''>
                                        <ImageItem src=image />
                                    </li>
                                )
                            )
                        
                    </ul>
                    <Arrow direction="right" onClick=this.slideRight/>
                </div>
            )
        </div>
    );

第二种方法是在渲染任何加载的代码之前返回,这样在渲染函数中保留逻辑是一个好习惯吗? + “内容”类 div 重复:

render() 
    if(!this.state.loaded)
        return <div className="content"><Loader /></div>;
    

    return (
        <div className="content">
            <Arrow direction="left" onClick=this.slideLeft/>
            <ul>
                
                    this.props.images.map((image, index) => 
                        return (
                            <li key=index styleName=index === this.state.active ? 'active' : ''>
                                <ImageItem src=image />
                            </li>
                        )
                    )
                
            </ul>
            <Arrow direction="right" onClick=this.slideRight/>
        </div>
    );

也许您对我有其他建议?谢谢。

【问题讨论】:

两个代码都很好。它们没有任何问题,请使用您认为更具可读性或实用性的任何一个。 【参考方案1】:

据我所知,这是一种常见的做法。但是,您应该以某种方式重构您的组件,即您的渲染函数中只有一个或没有逻辑。

你的父组件观察加载状态并渲染加载器组件或“加载”的组件。

如果你的状态逻辑变得更高级,那么你应该看看 Flux 架构及其实现库 Redux。

【讨论】:

以上是关于在等待在 ReactJS 渲染中获取数据时显示加载微调器的主要内容,如果未能解决你的问题,请参考以下文章

在 reactjs 中悬停时显示组件 [关闭]

我想在 reactjs 中实现一个条件渲染系统

如何在 react.js 中的页面加载时显示引导模式?

React 状态数据未在第一个组件渲染时显示

在等待主视图加载时显示 UIView?

html jQuery:在页面渲染时显示加载图形