React 应用程序上的响应式布局

Posted

技术标签:

【中文标题】React 应用程序上的响应式布局【英文标题】:responsive layout on React application 【发布时间】:2019-07-25 16:11:03 【问题描述】:

任务是根据设备宽度显示不同的组件;

我想出了两种变体:

    编写一个 React 组件,它将在每个宽度(sm、md、xl)上采用多个组件。它会自动检查设备宽度并根据宽度只渲染一个组件。 (example)

<DeviceChecker>
    <Desktop>
        <List/>
    </Desktop>
    <Mobile>
        <Carousel/>
    </Mobile>
</DeviceChecker>

我不喜欢在这种方法中检查窗口调整大小事件的宽度。

    在 React 中编写这两个组件,但使用 CSS 媒体查询显示或隐藏每个组件,如下所示:

<div>
    <Carousel className="sm" />
    <List className="md" />
</div>

在这种情况下我不喜欢的是 React 实际上会渲染这两个组件,但其中一个会被简单隐藏

我知道如何实现这两种变体,但问题是 哪一种是为 React 应用程序编写响应式布局的正确方法?

【问题讨论】:

检查github.com/contra/react-responsive 【参考方案1】:

 @media only screen and (min-width: 768px) 
  section.dashboard .slick-list .slick-track 
    display: flex;
  
  section.dashboard .slick-list .slide 
    opacity: 1;
  
  header .wrapper .article h1 span.arrow 
    display:none;
  

  header .wrapper .article .description 
    max-height: 300px
  
 

@media only screen and (min-width: 1024px) 

  .container header .wrapper 
    text-align:left;
    margin-left:5%;
    width:480px;
  

  .container header .header-nav-area #nav_container  
    display:flex;
  

  .container header form 
    display:block;
  

  .container header .menu-icon 
    display:none;
  

  header .wrapper .article footer 
    display: block;
  

  section.dashboard .slick-list .slick-track 
    display: flex;
    min-width: 309px;
    padding: 20px;
  
  
  section.dashboard .slick-list .slick-track[index="2"] 
    display: flex;
  

  section.dashboard .slick-list .slide 
    opacity: 1;
  
 

更多详情请访问; https://itnext.io/3-ways-to-implement-responsive-design-in-your-react-app-bcb6ee7eb424

【讨论】:

以上是关于React 应用程序上的响应式布局的主要内容,如果未能解决你的问题,请参考以下文章

React Material-ui 响应式布局

React Native iOS 中的响应式布局

没有 CSS 的响应式布局

响应式布局:Safari 上的拉伸图像

响应式布局

响应式布局