React: Avisar ao usar estilos sobrepostos (por exemplo, border e borderBottom)

Criado em 26 mar. 2016  ·  20Comentários  ·  Fonte: facebook/react

Este "bom primeiro bug" foi capturado por @YongPilMoon. Não trabalhe nisso a menos que seja você!

Isso foi discutido algumas vezes antes, mas não acho que tenha havido nenhuma conclusão, e os PRs com a intenção de resolver o problema não foram combinados por vários motivos.

Eu gostaria de encerrar esses PRs como desatualizados e reiniciar a discussão sobre isso.
Desempenho considerado, a conclusão de @sebmarkbage e @syranide parece ser:

Devemos considerar não permitir regras de estilo conflitantes.

- https://github.com/facebook/react/pull/2013#issuecomment -57338177

IMHO, considerando todas as coisas, é melhor apenas proibir a sobreposição e avisar no dev.

- https://github.com/facebook/react/pull/4661#issuecomment -132996649

O Radium, de @ianobermiller, chegou à mesma conclusão em https://github.com/FormidableLabs/radium/issues/95, mas houve alguma reação negativa depois. React Native parece permitir expansões de estilo, mas apenas para alguns atributos (por exemplo, margin e padding , mas não border ).

Estou fechando solicitações pull antigas sobre isso e criando este problema para rastrear a implementação do comportamento com o qual parecemos concordar: devemos avisar em __DEV__ quando border e borderBottom são usados ​​ao mesmo tempo. Podemos discutir mais detalhes (devem ser ignorados? Devemos permitir algumas propriedades na lista de permissões, mas avisar para outras?) Nesta edição.

Como estratégia de migração, podemos sugerir que as pessoas usem algo como https://github.com/ActionIQ/style-builder se realmente precisarem desses atalhos. Também é algo que precisamos decidir ao implementar um estilo integrado.


Assuntos relacionados:

PRs relacionados:

  • # 2013
  • # 4661
DOM HTML Bug good first issue (taken)

Comentários muito úteis

E sobre as situações em que um componente de terceiros define estilos e permite substituições? Digamos que um componente defina seu próprio estilo border e eu queira apenas substituir o estilo borderBottom ?

Todos 20 comentários

@gaearon Obrigado por ressurgir isso! Incrível que já faz um ano que abri a edição do Radium.

Gosto da ideia de alertar sobre propriedades abreviadas como border , mas não borderBottom . Não deve haver nenhuma surpresa ao mesclar objetos de estilo usando nomes de propriedade mais longos.

Questão. A intenção desta questão é abordar apenas a análise de objetos de estilo individuais ou há também um desejo de analisar e alertar sobre possíveis colisões de propriedades que são aplicadas condicionalmente?

Questão. A intenção desta questão é abordar apenas a análise de objetos de estilo individuais ou há também um desejo de analisar e alertar sobre possíveis colisões de propriedades que são aplicadas condicionalmente?

Não tenho certeza se entendi a pergunta, você pode elaborar?

Certo. Se for inválido ter border e borderColor no mesmo elemento, então faz sentido avisar sobre isso. Na minha experiência, essa combinação é fácil de evitar, mas é mais difícil de prever e depurar quando os estilos estão sendo aplicados dinamicamente (lógica condicional baseada em props ou estado, media queries, Radium, etc.) ou passados ​​como props e mesclados com objetos de estilo de ordem inferior. Se um aviso para o atributo abreviado border ocorrer quando não houver outros atributos que possam afetar a fronteira envolvida, então o aviso parece mais uma regra dogmática do que uma ferramenta de depuração útil, pois o atalho border é ainda tecnicamente válido. No entanto, se houver um atributo em um objeto de estilo separado - como alterar borderColor ao passar o mouse, por exemplo - isso afetaria a borda envolvida e será aplicado em tempo de execução ao nó que já possui a abreviação border a isso, gostaria de ser avisado o mais cedo possível, pois é aqui que as coisas tendem a quebrar para mim.

Ah, bom ponto. Eu provavelmente só avisaria se nós _sabemos_ os estilos se sobrepõem, mas não tenho certeza de como é fácil dizer. Não pensei muito sobre isso e não tenho uma boa solução.

@gaearon Uma solução alternativa que eu gosto mais é usar csstext de acordo com https://github.com/facebook/react/issues/5397 , que o IIRC resolve um superconjunto desses problemas.

E sobre as situações em que um componente de terceiros define estilos e permite substituições? Digamos que um componente defina seu próprio estilo border e eu queira apenas substituir o estilo borderBottom ?

Comecei a trabalhar em funções auxiliares extremamente simples para converter propriedades abreviadas em longas (entre outras coisas): https://github.com/rtsao/lostyle/tree/master/src ( docs )

Isso é super imprevisível e confuso e acabei de me deparar com isso.

Eu sugiro que pelo menos avisemos sobre atualizações quando sabemos que é problemático. Ou seja, se formos de {background: a, backgroundSize: b} para {background: c, backgroundSize: b}, avisaremos que backgroundSize está sendo substituído (mas se backgroundSize mudar ao mesmo tempo, não avise). Podemos fazer isso para todos os atalhos de propriedade e saber se é problemático a partir da ordem de enumeração de propriedade.

Marcando como "boa primeira edição". Vamos adicionar um aviso somente DEV para isso de acordo com meu comentário acima. Acho que um bom lugar para começar a investigar seria aqui:

https://github.com/facebook/react/blob/v16.4.0/packages/react-dom/src/client/ReactDOMFiberComponent.js#L619

Se você quiser fazer isso, comente aqui para que não tenhamos duas pessoas trabalhando nisso.

@sophiebits , estou feliz em trabalhar nisso :)

@supertinou é seu!

Apenas acertei e fiquei realmente surpreso e confuso com isso.

@supertinou Só queria verificar se há algo em que possa ajudá-lo nisso.

@sophiebits Oi, eu não quero pisar em ninguém: D mas eu dei uma olhada neste problema, repliquei-o e adoraria tentar, mas não sei se @supertinou ainda está trabalhando

Fiz um codepen para recapitular / explicar o que está acontecendo https://codepen.io/giuseppegurgone/pen/mjKbmq?editors=0010 @gaearon / @sophiebits me avise se eu esqueci algo.

@mirkojotic Ainda está interessado?

Se não houver ninguém, eu gostaria de fazer este :)

Tudo bem @YongPilMoon , é seu.

Adicionando uma nota aqui: remover uma propriedade também pode desencadear esse bug. https://stackoverflow.com/q/52636618/49485

Esta página foi útil?
0 / 5 - 0 avaliações