

Componente movido a SVG para criar facilmente cargas de espaço reservado (como o carregamento de cartões do Facebook).
npm i react-content-loader --saveyarn add react-content-loadernpm i react-content-loader react-native-svg --saveyarn add react-content-loader react-native-svgCDN de JSDelivr
Existem duas maneiras de usá -lo:
1. Predefinições, consulte os exemplos:
import ContentLoader , { Facebook } from 'react-content-loader'
const MyLoader = ( ) => < ContentLoader />
const MyFacebookLoader = ( ) => < Facebook />2. Modo personalizado, consulte a ferramenta online
const MyLoader = ( ) => (
< ContentLoader viewBox = "0 0 380 70" >
{ /* Only SVG shapes */ }
< rect x = "0" y = "0" rx = "5" ry = "5" width = "70" height = "70" />
< rect x = "80" y = "17" rx = "4" ry = "4" width = "300" height = "13" />
< rect x = "80" y = "40" rx = "3" ry = "3" width = "250" height = "10" />
</ ContentLoader >
)Ainda não está claro? Dê uma olhada neste exemplo de funcionamento no codesandbox.io ou tente os componentes editáveis demonstrando prática e instale-o no bit.dev
react-content-loader pode ser usado com o React Native da mesma maneira que a versão da Web com a mesma importação:
1. Predefinições, consulte os exemplos:
import ContentLoader , { Facebook } from 'react-content-loader/native'
const MyLoader = ( ) => < ContentLoader />
const MyFacebookLoader = ( ) => < Facebook />2. Modo personalizado
Para criar carregadores personalizados, existe uma diferença importante: como o React Native não possui nenhum módulo nativo para componentes SVG, é necessário importar as formas do React-native-SVG ou usar o Rect de Exportação e o Circle de react-content-loader :
import ContentLoader , { Rect , Circle } from 'react-content-loader/native'
const MyLoader = ( ) => (
< ContentLoader viewBox = "0 0 380 70" >
< Circle cx = "30" cy = "30" r = "30" />
< Rect x = "80" y = "17" rx = "4" ry = "4" width = "300" height = "13" />
< Rect x = "80" y = "40" rx = "3" ry = "3" width = "250" height = "10" />
</ ContentLoader >
) Nome e tipo de suporte | Ambiente | Descrição |
|---|---|---|
animate?: booleanPadrões para true | Reaja dom Reagir nativo | Opta-não de animações com false |
title?: stringPadrões de Loading... | Apenas reaja DOM | É usado para descrever qual elemento é. Use '' (string vazia) para remover. |
baseUrl?: stringPadrões para uma corda vazia | Apenas reaja DOM | Necessário se você estiver usando <base url="/" /> documento <head/> .Este suporte é comum usado como: <ContentLoader baseUrl={window.location.pathname} /> que preencherá o atributo SVG com o caminho relativo. Relacionado #93. |
speed?: numberPadrões para 1.2 | Reaja dom Reagir nativo | Velocidade de animação em segundos. |
viewBox?: stringPadrão para undefined | Reaja dom Reagir nativo | Use o ViewBox adereços para definir um valor de viewbox personalizado, Para mais informações sobre como usá -lo, Leia o artigo como escalar SVG. |
gradientRatio?: numberPadrões para 1.2 | Apenas reaja DOM | Largura do gradiente animado como uma fração da largura da caixa de exibição. |
rtl?: booleanPadrões para false | Reaja dom Reagir nativo | Conteúdo direito para a esquerda. |
backgroundColor?: stringPadrões para #f5f6f7 | Reaja dom Reagir nativo | Usado como fundo de animação. |
foregroundColor?: stringPadrão para #eee | Reaja dom Reagir nativo | Usado como primeiro plano da animação. |
backgroundOpacity?: numberPadrões para 1 | Reaja dom Reagir nativo | Opacidade de fundo (0 = transparente, 1 = opaca) usado para resolver um problema no Safari |
foregroundOpacity?: numberPadrões para 1 | Reaja dom Reagir nativo | Opacidade de animação (0 = transparente, 1 = opaca) usado para resolver um problema no Safari |
style?: React.CSSPropertiesPadrões para {} | Apenas reaja DOM | |
uniqueKey?: stringPadrões para ID exclusivo aleatório | Apenas reaja DOM | Use o mesmo valor da chave do suporte, Isso resolverá inconsistência no SSR, veja mais aqui. |
beforeMask?: JSX.ElementPadrões para NULL | Reaja dom Reagir nativo | Defina formas personalizadas antes do conteúdo, Veja mais aqui. |
Veja todas as opções ao vivo
import { Facebook } from 'react-content-loader'
const MyFacebookLoader = ( ) => < Facebook /> 
import { Instagram } from 'react-content-loader'
const MyInstagramLoader = ( ) => < Instagram /> 
import { Code } from 'react-content-loader'
const MyCodeLoader = ( ) => < Code /> 
import { List } from 'react-content-loader'
const MyListLoader = ( ) => < List /> 
import { BulletList } from 'react-content-loader'
const MyBulletListLoader = ( ) => < BulletList /> 
Para o modo personalizado, use a ferramenta online.
const MyLoader = ( ) => (
< ContentLoader
height = { 140 }
speed = { 1 }
backgroundColor = { '#333' }
foregroundColor = { '#999' }
viewBox = "0 0 380 70"
>
{ /* Only SVG shapes */ }
< rect x = "0" y = "0" rx = "5" ry = "5" width = "70" height = "70" />
< rect x = "80" y = "17" rx = "4" ry = "4" width = "300" height = "13" />
< rect x = "80" y = "40" rx = "3" ry = "3" width = "250" height = "10" />
</ ContentLoader >
) 
Para evitar comportamentos inesperados, o pacote não possui configurações de opinião. Portanto, se precisar ser responsivo, lembre -se de que a saída do pacote é um SVG regular, por isso precisa apenas dos mesmos atributos para se tornar um SVG regular, o que significa:
import { Code } from 'react-content-loader'
const MyCodeLoader = ( ) => (
< Code
width = { 100 }
height = { 100 }
viewBox = "0 0 100 100"
style = { { width : '100%' } }
/>
) Como o componente principal gera valores aleatórios para corresponder ao ID do elemento SVG com o estilo de fundo, ele pode encontrar erros inesperados e aviso incomparável na renderização, uma vez que o valor aleatório do ID será gerado duas vezes, no caso de SSR: servidor e cliente; ou em caso de teste de instantâneos: na primeira partida e execute novamente o teste.
Para corrigi -lo, defina o Prop uniqueKey , então o ID não será mais aleatório:
import { Facebook } from 'react-content-loader'
const MyFacebookLoader = ( ) => < Facebook uniqueKey = "my-random-value" /> Ao usar rgba como um valor backgroundColor ou foregroundColor , o Safari não respeita o canal alfa, o que significa que a cor será opaca. Para impedir isso, em vez de usar um valor rgba para backgroundColor / foregroundColor , use o equivalente rgb e mova o valor do canal alfa para os acessórios de base backgroundOpacity / foregroundOpacity .
{ /* Opaque color in Safari and iOS */ }
< ContentLoader
backgroundColor = "rgba(0,0,0,0.06)"
foregroundColor = "rgba(0,0,0,0.12)" >
{ / _ Semi-transparent color in Safari and iOS _ / }
< ContentLoader
backgroundColor = "rgb(0,0,0)"
foregroundColor = "rgb(0,0,0)"
backgroundOpacity = { 0.06 }
foregroundOpacity = { 0.12 } >
O uso da tag base em uma página que contém elementos SVG não renderiza e parece uma caixa preta. Basta remover a etiqueta base-href da <head /> e o problema foi resolvido.

Veja: #93/109
Os navegadores antigos não suportam a animação no SVG (lista de compatibilidade) e, se o seu projeto deve apoiar o IE, por exemplo, aqui estão algumas maneiras de garantir que o navegador suporta o SVG Animate:
window.SVGAnimateElementdocument.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#SVG-Animation", "1.1")Bifurcar o repositório e depois cloná -lo
$ git clone [email protected]:YourUsername/react-content-loader.git && cd react-content-loader
$ npm i : instale as dependências;
$ npm run build : Build to Production;
$ npm run dev : execute o livro de histórias para ver suas alterações;
$ npm run test : Execute todos os testes: verificação de tipo, testes de unidade na web e nativos;
$ npm run test:watch : Assista a testes de unidade;
Como o React Native não suporta links simbólicos (para vincular a dependência a outra pasta) e, como não há playground para verificar suas contribuições (como o Storybook), essa é a estratégia recomendada para executar o projeto localmente:
yarn add react-content-loader react-native-svgreact-content-loader para o projeto que acabou de clonado, como: import ContentLoader, { Rect, Circle } from './react-content-loader/native' As mensagens de comprometimento devem seguir a Convenção de Mensagens de Commit, para que os Changelogs possam ser gerados automaticamente com isso. As mensagens de confirmação são validadas automaticamente após o comprometimento. Se você não estiver familiarizado com a Convenção de Mensagens de Commits, pode usar o Commit (ou npm run commit ) em vez de GIT Commit, que fornece uma CLI interativa para gerar mensagens de comprometimento adequadas.
Mit