O que ...
faz neste código React (usando JSX) e como é chamado?
<Modal {...this.props} title='Modal heading' animation={false}>
javascript
reactjs
Thomas Johansen
fonte
fonte
...
operador se comporta de maneira diferente em contextos diferentes. Nesse contexto, é o operador "spread" descrito abaixo por @TJ Crowder. Em um contexto diferente, esse também pode ser o operador "rest" descrito abaixo por @Tomas Nikodym.Respostas:
Isso é notação de propriedade espalhada . Ele foi adicionado no ES2018 (o spread para matrizes / iterables era anterior, ES2015), mas é suportado em projetos React por um longo tempo via transpilação (como " JSX spread attribute ", mesmo que você pudesse fazê-lo em outro lugar também, não apenas atributos )
{...this.props}
espalha as propriedades enumeráveis "próprias"props
como propriedades discretas noModal
elemento que você está criando. Por exemplo, sethis.props
contidoa: 1
eb: 2
, entãoseria o mesmo que
Mas é dinâmico, portanto, quaisquer propriedades "próprias"
props
estão incluídas.Como
children
é uma propriedade "própria"props
, a propagação a incluirá. Portanto, se o componente em que isso aparece tiver elementos filhos, eles serão repassadosModal
. Colocar elementos filho entre a marca de abertura e a marca de fechamento é apenas um açúcar sintático - o bom tipo - para colocar umachildren
propriedade na marca de abertura. Exemplo:Mostrar snippet de código
A notação de dispersão é útil não apenas para esse caso de uso, mas para criar um novo objeto com a maioria (ou todas) das propriedades de um objeto existente - o que ocorre muito quando você está atualizando o estado, já que não é possível modificar o estado diretamente:
Isso substitui
this.state.foo
por um novo objeto com todas as mesmas propriedades quefoo
exceto aa
propriedade, que se torna"updated"
:Mostrar snippet de código
fonte
children
propriedade ou eles são combinados?children
. A experiência me diz que os filhos que você fornece por meio de um atributo chamadochildren
são substituídos pelos que você especifica entre as tags de início e fim, mas se for um comportamento indefinido, não deixarei de confiar nele.Como você sabe,
...
são chamados de atributos de propagação, que o nome representa, permitem que uma expressão seja expandida.E neste caso (vou simplificar).
Este:
é igual a
Então, em suma, é um atalho puro , podemos dizer .
fonte
Os três pontos representam o Operador de propagação no ES6. Ele nos permite fazer algumas coisas em Javascript:
Concatenar matrizes
Destruindo uma matriz
Combinando dois objetos
Há outro uso para os três pontos, conhecido como Rest Parameters, e torna possível levar todos os argumentos para uma função em uma única matriz.
Argumentos de função como matriz
fonte
Os três pontos no JavaScript são o operador spread / rest .
Operador de propagação
A sintaxe de propagação permite que uma expressão seja expandida em locais onde vários argumentos são esperados.
Parâmetros de descanso
A sintaxe do parâmetro rest é usada para funções com número variável de argumentos.
O operador de spread / descanso para matrizes foi introduzido no ES6. Há uma proposta do Estado 2 para propriedades de propagação / descanso de objetos.
O TypeScript também suporta a sintaxe de propagação e pode transpilar isso para versões mais antigas do ECMAScript com problemas menores .
fonte
Esse é um recurso do ES6, que também é usado no React. Veja o exemplo abaixo:
Dessa forma, tudo bem se tivermos no máximo 3 parâmetros. Mas, e se precisarmos adicionar, por exemplo, 110 parâmetros. Devemos definir todos eles e adicioná-los um por um?
Claro que existe uma maneira mais fácil de fazer, chamada SPREAD . Em vez de passar todos esses parâmetros, você escreve:
Não temos idéia de quantos parâmetros temos, mas sabemos que existem muitos deles. Com base no ES6, podemos reescrever a função acima como abaixo e usar a propagação e o mapeamento entre eles para torná-lo tão fácil quanto um pedaço de bolo:
fonte
Está apenas definindo adereços de uma maneira diferente no JSX para você!
Ele está usando o
...
operador de matriz e objeto no ES6 (objeto um ainda não totalmente suportado). Portanto, basicamente, se você já define seus objetos, pode transmiti-lo ao seu elemento dessa maneira.Portanto, no seu caso, o código deve ser algo como isto:
portanto, os objetos que você definiu agora estão separados e podem ser reutilizados, se necessário.
É igual a:
Estas são as citações da equipe React sobre o operador de propagação em JSX:
fonte
Para quem é originário do mundo Python, o JSX Spread Attributes é equivalente a Unpacking Argument Lists (
**
operador do Python ).Sei que esta é uma pergunta JSX, mas trabalhar com analogias às vezes ajuda a obtê-la mais rapidamente.
fonte
O
...
(operador spread) é usado para reagir a:forneça uma maneira elegante de transmitir adereços dos componentes pai para filho. por exemplo, considerando esses adereços em um componente pai,
eles poderiam ser passados da seguinte maneira para a criança,
que é semelhante a isso
mas muito mais limpo.
fonte
Três pontos
...
representam operadores de dispersão ou parâmetros de repouso ,Ele permite que uma expressão ou string de matriz ou qualquer coisa que possa ser iterativa seja expandida em locais onde são esperados zero ou mais argumentos para chamadas de função ou elementos para matriz.
Observe que a
foo
propriedade obj1 foi substituída pelafoo
propriedade obj2Nota: sintaxe Spread (excepto no caso das propriedades de propagação) pode ser aplicada apenas a iterable objetos: Então seguinte irá lançar erro
Referência1
Referência2
fonte
Muitos elogios a Brandon Morelli. Ele explicou perfeitamente aqui , mas os links podem morrer, então estou apenas colando o conteúdo abaixo:
A sintaxe de dispersão é simplesmente três pontos:
...
permite que um iterável se expanda em locais onde são esperados 0 ou mais argumentos. As definições são difíceis sem contexto. Vamos explorar alguns casos de uso diferentes para ajudar a entender o que isso significa.Exemplo # 1 - Inserindo matrizes Dê uma olhada no código abaixo. Nesse código, não usamos a sintaxe de propagação:
Acima, criamos uma matriz chamada
mid
. Em seguida, criamos uma segunda matriz que contém nossamid
matriz. Por fim, desconectamos o resultado. O que você esperaarr
imprimir? Clique em executar acima para ver o que acontece. Aqui está a saída:Esse é o resultado que você esperava? Ao inserir a
mid
matriz naarr
matriz, acabamos com uma matriz dentro de uma matriz. Tudo bem se esse era o objetivo. Mas e se você quiser apenas uma única matriz com os valores de 1 a 6? Para fazer isso, podemos usar a sintaxe de propagação! Lembre-se, a sintaxe de dispersão permite que os elementos de nossa matriz se expandam. Vamos olhar para o código abaixo. Tudo é o mesmo - exceto que agora estamos usando a sintaxe de propagação para inserir amid
matriz naarr
matriz:E quando você aperta o botão de execução, eis o resultado:
Impressionante! Lembre-se da definição de sintaxe espalhada que você acabou de ler acima? Aqui é onde entra em jogo. Como você pode ver, quando criamos a
arr
matriz e usamos o operador spread namid
matriz, em vez de apenas ser inserido, amid
matriz se expande. Essa expansão significa que todos os elementos damid
matriz são inseridos naarr
matriz. Em vez de matrizes aninhadas, o resultado é uma única matriz de números que varia de 1 a 6.Exemplo # 2 - Math JavaScript possui um objeto matemático integrado que nos permite fazer alguns cálculos matemáticos divertidos. Neste exemplo, veremos
Math.max()
. Se você não estiver familiarizado,Math.max()
retorna o maior número zero ou mais. Aqui estão alguns exemplos:Como você pode ver, se você deseja encontrar o valor máximo de vários números,
Math.max()
requer vários parâmetros. Infelizmente você não pode simplesmente usar uma única matriz como entrada. Antes da sintaxe de propagação, a maneira mais fácil de usarMath.max()
em uma matriz é usar.apply()
Funciona, é realmente muito chato. Agora, veja como fazemos exatamente a mesma coisa com a sintaxe de propagação:
Em vez de ter que criar uma função e utilizar o método apply para retornar o resultado
Math.max()
, precisamos apenas de duas linhas de código! A sintaxe de expansão expande nossos elementos da matriz e insere cada elemento em nossa matriz individualmente noMath.max()
método!Exemplo # 3 - Copiar uma matriz No JavaScript, você não pode simplesmente copiar uma matriz configurando uma nova variável igual à matriz já existente. Considere o seguinte exemplo de código:
Quando você pressiona executar, você obtém a seguinte saída:
Agora, à primeira vista, parece que funcionou - parece que copiámos os valores de arr para arr2. Mas não foi isso que aconteceu. Veja, ao trabalhar com objetos em javascript (matrizes são um tipo de objeto) que atribuímos por referência, não por valor. Isso significa que arr2 foi atribuído à mesma referência que arr. Em outras palavras, tudo o que fizermos para arr2 também afetará a matriz arr original (e vice-versa). Dê uma olhada abaixo:
Acima, colocamos um novo elemento d em arr2. No entanto, quando desconectamos o valor de arr, você verá que o valor d também foi adicionado a essa matriz:
Não precisa ter medo! Podemos usar o operador de propagação! Considere o código abaixo. É quase o mesmo que acima. Em vez disso, usamos o operador spread dentro de um par de colchetes:
Clique em Executar e você verá a saída esperada:
Acima, os valores da matriz em arr foram expandidos para se tornarem elementos individuais que foram então atribuídos a arr2. Agora podemos alterar a matriz arr2 da maneira que gostaríamos, sem consequências na matriz arr original:
Novamente, a razão pela qual isso funciona é porque o valor de arr é expandido para preencher os colchetes de nossa definição de matriz arr2. Portanto, estamos configurando arr2 para igualar os valores individuais de arr em vez da referência para arr, como fizemos no primeiro exemplo.
Exemplo de bônus - string para array Como um exemplo final divertido, você pode usar a sintaxe de spread para converter um string em um array. Basta usar a sintaxe de propagação em um par de colchetes:
fonte
Os três pontos
(...)
são chamados de operador de dispersão, e isso é conceitualmente semelhante ao operador de dispersão da matriz ES6, o JSX aproveitando esses padrões suportados e em desenvolvimento para fornecer uma sintaxe mais limpa no JSXReferência:
1) https://github.com/sebmarkbage/ecmascript-rest-spread#spread-properties
2) https://facebook.github.io/react/docs/jsx-spread.html
fonte
O significado de ... depende de onde você o usa no código,
fonte
Este operador de propagação ...
Por exemplo, se você tiver uma matriz
first=[1,2,3,4,5]
e outrasecond=[6,7,8]
.[...first, ...second] //result is [1,2,3,4,5,6,7,8]
O mesmo também pode ser feito com objetos json.
fonte
Em resumo, os três pontos
...
são um operador de spread no ES6 (ES2015). O operador de propagação buscará todos os dados.Dará o resultado [1,2,3,4,5,6]
Dará o resultado [7,8,1,2,3,4]
fonte
É geralmente chamado de operador spread, é usado para expandir onde for necessário
exemplo
você pode usá-lo sempre que precisar sobre a sintaxe Spread do operador de propagação .
fonte
fonte
... essa sintaxe faz parte do ES6 e não é algo que você pode usar apenas no React. Pode ser usada de duas maneiras diferentes; como um operador de spread OU como um parâmetro de descanso. Você pode encontrar mais informações neste artigo: https://www.techiediaries.com/react-spread-operator-props-setstate/
o que você mencionou na pergunta é algo assim, vamos assumir assim,
com o uso do operador spread, você pode passar adereços para o componente como este.
fonte
É prática comum transmitir adereços em um aplicativo React. Ao fazer isso, podemos aplicar alterações de estado ao componente filho, independentemente de ele ser Puro ou Impuro (sem estado ou com estado). Há momentos em que a melhor abordagem, ao transmitir adereços, é passar em propriedades singulares ou em um objeto inteiro de propriedades. Com o suporte para matrizes no ES6, recebemos a notação "..." e agora conseguimos passar um objeto inteiro para uma criança.
O processo típico de passar adereços para uma criança é observado com esta sintaxe:
Isso é bom para usar quando o número de adereços é mínimo, mas se torna incontrolável quando os números dos adereços ficam muito mais altos. Um problema com esse método ocorre quando você não conhece as propriedades necessárias em um componente filho e o método JavaScript típico é definir essas propriedades e vincular-se ao objeto posteriormente mais tarde. Isso causa problemas com a verificação propType e erros de rastreamento de pilha enigmática que não são úteis e causam atrasos na depuração. A seguir, é apresentado um exemplo dessa prática e o que não fazer:
Este mesmo resultado pode ser alcançado, mas com sucesso mais apropriado, fazendo o seguinte:
Mas não usa JSX spread ou JSX, portanto, para repetir isso na equação, agora podemos fazer algo assim:
As propriedades incluídas em "... adereços" são foo: x, bar: y. Isso pode ser combinado com outros atributos para substituir as propriedades de "... props" usando esta sintaxe:
Além disso, podemos copiar outros objetos de propriedade um para o outro ou combiná-los da seguinte maneira:
Ou mescle dois objetos diferentes como este (isso ainda não está disponível em todas as versões de reação):
Outra maneira de explicar isso, de acordo com o site react / docs do Facebook, é:
Se você já possui "props" como um objeto e deseja transmiti-lo no JSX, pode usar "..." como um operador SPREAD para passar todo o objeto de props. Os dois exemplos a seguir são equivalentes:
Os atributos de propagação podem ser úteis ao criar contêineres genéricos. No entanto, eles também podem deixar seu código confuso, facilitando a transmissão de muitos adereços irrelevantes para componentes que não se importam com eles. Essa sintaxe deve ser usada com moderação.
fonte
É o chamado operador de propagação. Por exemplo, deixe hello = {name: '', msg: ''} deixe hello1 = {... hello} Agora, as propriedades do objeto hello são copiadas para hello1.
fonte
É chamado de sintaxe de spreads em javascript.
É usado para destruir uma matriz ou objeto em javascript.
exemplo:
Você pode fazer o mesmo resultado com a
Object.assign()
função em javascript.Referência: sintaxe de propagação
fonte
Isso será compilado em:
onde ele fornece mais duas propriedades
title
eanimation
além doprops
elemento host....
é o operador ES6 chamado Spread .Consulte https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax
fonte
operador spread (operador triplo) introduz no ecama script 6 (ES6) .Ecama script (ES6) é um invólucro de javascript.
espalhe propriedades enumeráveis do operador em adereços. this.props = {firstName: 'Dan', lastName: 'Abramov', cidade: 'New York', país: 'USA'}
Mas o operador de propagação do recurso principal é usado para um tipo de referência.
Isso é chamado de tipo de referência, um objeto afeta outros objetos porque são compartilháveis na memória. Se você obtém valor de forma independente, significa memória de expansão, ambos usam o operador de propagação.
fonte
se você tem uma matriz de elementos e deseja exibir os elementos que você acabou de usar ... arraymaments e ele irá percorrer todos os elementos
fonte
...
(três pontos em Javascript) é chamado de sintaxe de propagação ou operador de propagação. Isso permite que uma iterável, como uma expressão ou string de matriz, seja expandida ou uma expressão de objeto seja expandida onde quer que seja colocada. Isso não é específico para reagir. É um operador Javascript.Todas essas respostas são úteis, mas quero listar os Casos de Uso práticos mais usados da Sintaxe de Spread (Operador de Spread).
1. Combinar matrizes (concatenar matrizes)
Existem várias maneiras de combinar matrizes , mas o operador de dispersão permite que você coloque isso em qualquer lugar da matriz. Se você quiser combinar duas matrizes e colocar elementos em qualquer ponto da matriz, faça o seguinte:
2. Copiando matrizes
Quando queríamos uma cópia de uma matriz, tínhamos o método Array.prototypr.slice () . Mas você pode fazer o mesmo com o operador spread.
3. Funções de chamada sem aplicar
No ES5, para passar uma matriz de dois números para a
doStuff()
função, você costuma usar o método Function.prototype.apply () da seguinte maneira:No entanto, usando o operador spread, você pode passar uma matriz para a função.
4. Reestruturando matrizes
Você pode usar a desestruturação e o operador restante juntos para extrair as informações em variáveis como você deseja:
5. Argumentos de função como parâmetros de descanso
O ES6 também possui os três pontos (...), que é um parâmetro de descanso que coleta todos os argumentos restantes de uma função em uma matriz.
6. Usando funções matemáticas
Qualquer função em que a propagação é usada como argumento pode ser usada por funções que podem aceitar qualquer número de argumentos.
7. Combinando dois objetos
Você pode usar o operador de propagação para combinar dois objetos. Essa é uma maneira fácil e limpa de fazer isso.
8. Separe uma string em caracteres separados
Você pode usar o operador de propagação para espalhar uma sequência em caracteres separados.
Você pode pensar em mais maneiras de usar o Operador de propagação. O que listei aqui são os casos de uso populares dele.
fonte
Esse é um novo recurso do ES6 / Harmony. É chamado de operador de propagação. Permite separar as partes constituintes de uma matriz / objeto ou pegar vários itens / parâmetros e colá-los. Aqui está um exemplo:
E com um objeto / chaves:
O mais legal é que você pode usá-lo para significar "o restante dos valores".
fonte
Esses são chamados de spreads. Assim como o nome indica. Isso significa que está colocando o valor disso nesses conjuntos ou objetos.
Tal como :
fonte