Помеченные литералами шаблона в styleled-компонентах с необязательным дополнительным параметром

Просто пытаюсь разобраться со стилевыми компонентами, особенно с предложением в документации, в котором говорится, что вы можете настроить шаблоны медиазапроса следующим образом:

const breakpoint = (...args) => {

    return css`
        @media (min-width: 600px) {
            ${css(...args)}
        }
    `
}

Это прекрасно работает и может быть легко использовано следующим образом:

${media`background: dodgerblue;`}

Я хочу создать несколько шаблонов мультимедиа, но в документах предлагается создать именованные шаблоны, которые можно использовать следующим образом:

${media.large`background: dodgerblue;`}

Я бы предпочел передать дополнительный параметр своей функции, хотя и для изменения точки останова, а не для создания отдельной функции для каждой (не в последнюю очередь потому, что я хочу иметь возможность иметь произвольное число из них и вызывать их целым числом, а не название). Я попытался передать аргумент шаблонному литералу следующим образом:

const breakpoint = (bp, ...args) => {

    const minWidth = arrayOfBreakpoints(bp);

    return css`
        @media (min-width: ${minWidth}px) {
            ${css(...args)}
        }
    `

}

$breakpoint(1)`background: olive;`
$breakpoint(2)`background: blue;`

Это, очевидно, не работает, и я понятия не имею, как передать дополнительный параметр в функцию, которую использует помеченный шаблонный литерал, поскольку я, очевидно, не понимаю, как они работают. Есть идеи?

1 ответ

Возможно, вы ищете функцию с карри:

const breakpoint = (bp) => {
    const minWidth = arrayOfBreakpoints(bp);
    return (...args) => {
        return css`
            @media (min-width: ${minWidth}px) {
                ${css(...args)}
            }
       `;
    };
}

$breakpoint(1)`background: olive;`
$breakpoint(2)`background: blue;`
Другие вопросы по тегам