Разные настройки react-styled-flexboxgrid для разных областей просмотра

Я использую эту библиотеку сетки в проекте https://github.com/yldio/joyent-react-styled-flexboxgrid, и я хотел бы добавить 3 разных конфигурации для 3 разных размеров экрана (различное количество столбцов и ширина желоба).

В документе я вижу только возможность создать один конфиг и пропустить его через тему. Есть ли здесь кто-нибудь, кто знает какое-либо решение или любую другую библиотеку, отвечающую моему требованию.

Обновлено: проект использует NextJS для SSR.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
1
0
222
1

Ответы 1

Мне кажется, вы бы использовали ThemeProvider и изменили реквизит theme в зависимости от ширины экрана.

import React from 'react'

import {ThemeProvider} from 'styled-components'
import {Grid, Col, Row} from 'react-styled-flexboxgrid'

const theme = {
  flexboxgrid: {
    // Defaults
    gridSize: 12, // columns
    gutterWidth: 1, // rem
    outerMargin: 2, // rem
    mediaQuery: 'only screen',
    container: {
      sm: 46, // rem
      md: 61, // rem
      lg: 76  // rem
    },
    breakpoints: {
      xs: 0,  // em
      sm: 48, // em
      md: 64, // em
      lg: 75  // em
    }
  }
}

const sizedTheme = 
    (typeof window !== 'undefined') && 
    (window.innerWidth < 500) ? { ...theme, gutterWidth: .5 } : theme;

const App = props =>
  <ThemeProvider theme = {sizedTheme}>
    <Grid>
      <Row>
        <Col xs = {6} md = {3}>Hello, world!</Col>
      </Row>
    </Grid>
  </ThemeProvider>

Что-то вроде этого, с поправкой на ваши цели.

Я забыл упомянуть, что мы используем nextjs в проекте, поэтому он возвращает «окно не определено»

Michal Cholewiński 12.03.2019 16:12

На самом деле это имелось в виду как псевдокод, поскольку у меня не было/не было логики, необходимой для определения разных размеров экрана. Есть библиотеки, которые могут позаботиться об этом за вас, если вам нужно. Отредактировал код, чтобы исправить ваше окно, ошибка undefined из-за nextjs.

Gregory Friedman 13.03.2019 17:04

Другие вопросы по теме