Qual é exatamente a vantagem de usar em StyleSheet.create()
relação a um objeto simples?
const styles = StyleSheet.create({
container: {
flex: 1
}
}
Vs.
const styles = {
container: {
flex: 1
}
}
react-native
Corasan
fonte
fonte
Respostas:
Citando diretamente da seção de comentários de StyleSheet.js do React nativo
Além disso, StyleSheet também valida o conteúdo da folha de estilo. Portanto, qualquer erro de propriedade de estilo incorreto é mostrado no momento da compilação, e não no tempo de execução, quando o StyleSheet é realmente implementado.
fonte
StyleSheet.create({styles...})
é melhor / mais rápido do que{styles...}
. O código é igualmente limpo e você também está usando nomenclatura em vez de inlining. Alguém pode lançar alguma luz sobre isso?StyleSheet
fornece validação na compilaçãoStyleSheet.create
e um Objeto simples, não embutido vs um const fora da classeNão há benefício. Período.
Mito 1:
StyleSheet
tem mais desempenhoNão há absolutamente nenhuma diferença de desempenho entre
StyleSheet
e um objeto declarado fora derender
(seria diferente se você estivesse criando um novo objeto dentrorender
cada vez). A diferença de desempenho é um mito.A origem do mito é provavelmente porque a equipe React Native tentou fazer isso, mas não teve sucesso. Em nenhum lugar dos documentos oficiais você encontrará algo sobre desempenho: https://facebook.github.io/react-native/docs/stylesheet.html , enquanto o código-fonte indica "ainda não implementado": https://github.com/ facebook / react-native / blob / master / Libraries / StyleSheet / StyleSheet.js # L207
Mito 2:
StyleSheet
valida o objeto de estilo em tempo de compilaçãoIsso não é verdade. JavaScript simples não pode validar objetos em tempo de compilação.
Duas coisas:
fonte
StyleSheet.create( {x:{flex: "1"}} )
, falhará em tempo de execução, assim como uma verificação de texto digitado no tempo de compilação.A resposta aceita não é uma resposta à pergunta do OP.
A questão não é a diferença entre estilos inline e
const
fora da classe, mas por que devemos usarStyleSheet.create
vez de um objeto simples.Depois de pesquisar um pouco o que encontrei é o seguinte (atualize se você tiver alguma informação). As opções de
StyleSheet.create
devem ser as seguintes:fonte
Ela costumava ser considerado que o uso de uma folha de estilo era mais alto desempenho, e foi recomendado por esta razão pela equipe RN-se até a versão 0.57, mas já não é recomendado como corretamente apontou em outra resposta a esta pergunta.
A documentação do RN agora recomenda StyleSheet pelos seguintes motivos, embora eu ache que esses motivos se aplicam igualmente a objetos simples que são criados fora da função de renderização:
Então, quais são os possíveis benefícios do uso de StyleSheet em vez de objetos simples?
1) Apesar das afirmações em contrário meu teste no RN v0.59.10 indica que você faça obter alguma validação quando chamado
StyleSheet.create()
e typescript (e provavelmente fluir) também irá reportar erros em tempo de compilação. Mesmo sem a verificação do tempo de compilação, acho que ainda é benéfico fazer a validação de tempo de execução de estilos antes serem usados para renderização, particularmente onde componentes que usam esses estilos podem ser renderizados condicionalmente. Isso permitirá que tais erros sejam detectados sem a necessidade de testar todos os cenários de renderização.2) Dado que o StyleSheet é recomendado pela equipe RN, eles ainda podem ter esperanças de usar o StyleSheet para melhorar o desempenho no futuro, e podem ter outras melhorias possíveis em mente, por exemplo:
3) A
StyleSheet.create()
validação de tempo de execução atual é útil, mas um pouco limitada. Parece estar restrito à verificação de tipo que você obteria com o fluxo ou o texto digitado, então pegará digamosflex: "1"
ouborderStyle: "rubbish"
, mas nãowidth: "rubbish"
porque poderia ser uma string de porcentagem. É possível que a equipe RN possa melhorar essa validação no futuro, verificando coisas como strings de porcentagem ou limites de intervalo, ou você pode quebrarStyleSheet.create()
em sua própria função para fazer uma validação mais extensa.4) Ao usar o StyleSheet, você talvez esteja facilitando a transição para alternativas / extensões de terceiros, como a folha de estilo react-native-extended-style que oferece mais.
fonte
A criação de seus estilos via
StyleSheet.create
passará pela validação apenas quando a variável global__DEV__
for definida como verdadeira (ou durante a execução dentro de emuladores Android ou IOS, consulte React Native DEV e variáveis PROD )O código- fonte da função é bastante simples:
Eu recomendaria usá-lo porque ele executa a validação em tempo de execução durante o desenvolvimento e também congela o objeto.
fonte
Não encontrei nenhuma diferença no meio
StyleSheet
e no objeto simples, exceto na validação de digitação no TypeScript.Por exemplo, isto (observe as diferenças de digitação):
é igual a este:
fonte