Last active
May 11, 2019 19:11
-
-
Save ilyalesik/53a171b49203d666f92e40bb68345e3c to your computer and use it in GitHub Desktop.
Reshadow syntax propsal
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import React from "react"; | |
| import styled from "reshadow"; | |
| const css = styled` | |
| button { | |
| width: 250px; | |
| } | |
| span[size='l'] { | |
| text-transform: uppercase; | |
| } | |
| `; | |
| const CommonButton = ({children, ...props}) => <button {...props}> | |
| <span>{children}</span> | |
| </button>; | |
| export default css(CommonButton); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
да, важно по нескольким причинам. давай рассмотрим на таком примере:
с таким интерфейсом решается сразу несколько задач:
sizepropsкак есть, то эта пропса в данном примере также попадет на элементbuttonпри спреде пропсовприменяя "модификатор"
sizeк определенному элементу, мы явно определяем:также явно расширяется и внешний интерфейс компонента (мы выносим
sizeво внешний интерфейс, чтобы сматчиться на него на рутовом элементе, например)решадоу - это в первую очередь не про компоненты, а про markup + стили. то есть грубо говоря если автоматически определять пропсы компонента и давать на них сматчиться, то необходимо тогда на уровне статического анализа понять, где идет определение компонента, как можно использовать его пропсы и прочее, что не тривиально (компоненты бывают классами, функциями, пропсы их могут по-разному использоваться, вызываться и прочее), может вести к ошибкам, и уже не настолько абстрактно от конкретной имплементации фреймворка (везде компоненты и их пропсы определяются по-разному)
поэтому пока что кажется правильнее оставить ответственность по поводу стилизации относительно пропсов на стороне самого пользователя
но теоретически можно рассмотреть что-нибудь типа такого:
и решадоу может автоматически определять рутовый элемент, чтобы навесить на него нужные классы (что он и так делает для инлайна стилей с css-custom-properties)
это выглядит сахаром (и то не факт, мне лично профит не очень понятен, зато появляется усложнение в виде дополнительного знания о том, как атрибуты работают с
:rootи пр), появляется несколько способов сделать одно и то же (модификаторы на root и модификаторы, проставленные на корневой элементbutton, например), но можно подумать в эту сторону