Normalmente, quando queremos passar dados de um componente pai para um componente filho, usamos props. O Vue.js tornou isso simples e fácil de fazer. Mas provavelmente já sentimos frustração em algum momento quando precisamos passar dados de um componente de nível pai para um componente filho profundamente aninhado.

Se fôssemos usar adereços, acabaríamos passando os dados para cada componente em cada nível da árvore de componentes do Vue para que os dados chegassem ao seu destino final. Isso é chamado de perfuração de suporte e pode fazer com que nosso aplicativo pareça mais complexo do que é. E se fosse um aplicativo com um estado simples, usar Vuex nele seria um exagero.

Felizmente para nós, o Vue tem a API fornecer / injetar e, com a introdução da API de composição no Vue 3, nunca foi melhor.

Usando o par fornecer e injetar , os componentes pais podem enviar dados para seus componentes filhos, independentemente da profundidade da hierarquia do componente. O componente pai tem uma função fornecer para fornecer dados, e o componente filho tem uma função injetar para começar a usar esses dados.

Componentes-filhos 3 níveis fornecem o par de injeção

Na imagem acima, temos três níveis de componentes filhos. Os dados que queremos passar estão contidos no componente pai e o destino desejado para os dados está profundamente aninhado no terceiro nível da árvore do componente. Poderíamos conseguir isso usando adereços, mas às custas da simplicidade e legibilidade do nosso código. Vamos ver como podemos fazer isso sem sacrificar nenhum dos dois.

Primeiro, precisamos instalar a versão mais recente do Vue CLI v4.5 com o comando abaixo:

 yarn global add @ vue/cli @ next
#OU
npm install-g @ vue/cli @ next

Execute o comando abaixo para criar um novo aplicativo Vue:

 vue criar fornecer-injetar-tutorial

Usando a API fornecer

A API fornecer é uma função que usamos para definir os dados que queremos passar para um componente filho.

Ao usar a função fornecer em setup () , começamos importando explicitamente a função de vue . Isso nos permite definir cada propriedade quando fornecer é chamado.

A função fornecer aceita dois parâmetros:

  1. O nome da propriedade (uma string)
  2. O valor da propriedade (uma string ou um objeto contendo vários valores)
 
 
  

Depois de importar a função fornecer no código acima, nós a invocamos dentro da função setup . Em seguida, passamos os parâmetros para a primeira função fornecer da seguinte maneira: o nome da propriedade 'local' e um único valor, 'Pólo Norte'.

Para a segunda função fornecer , passamos um objeto contendo os valores de latitude e longitude e definimos seu nome de propriedade como 'geolocalização'.

Usando a API inject

A API inject é uma função que usamos para receber dados de nosso componente de provedor.

Como fizemos com a função fornecer , também temos que importar a função injetar de vue . Isso nos permite chamar e usar a função em qualquer lugar em nosso componente.

A função injetar leva dois parâmetros:

  1. O nome da propriedade que está sendo injetada
  2. Um valor padrão opcional

Vamos dar uma olhada no código abaixo:

 

Primeiro, importamos a função injetar em nosso componente MyMarker . Então, dentro de nossa função setup , atribuímos a primeira função fornecer um nome de propriedade 'location' ao userLocation variável. Também fornecemos um valor de fallback padrão opcional, 'The Universe'.

Em seguida, atribuímos a segunda função fornecer com um nome de propriedade de 'geolocalização' à variável userGeoLocation . Nós retornamos as variáveis ​​ userLocation e userGeoLocation , após o que estamos livres para usar seus valores em qualquer lugar no MyMarker componente.

Tornando o par fornecer / injetar reativo

Infelizmente, direto da caixa, o par fornecer / injetar não é reativo. Felizmente, há uma maneira de fazer isso acontecer usando o ref ou reativa fornecida pela API Vue.

Primeiro temos que importá-los de vue , então invocamos a função ref ou reativa . Vamos definir seus parâmetros para serem os valores que queremos passar para o componente filho desejado e armazenar a função em uma variável. Em seguida, invocamos a função fornecer e passamos o nome da propriedade e seu valor.

Agora, se algo mudar em qualquer propriedade, o componente MyMarker também será atualizado automaticamente!

Agora podemos atualizar nosso código da seguinte maneira:

 
 
 

Depois de importar as funções ref e reativa , invocamos a função ref e damos a ela um parâmetro (o valor 'North Pole') e, em seguida, atribua a função ref à variável location .

Para a função reativa , nós a invocamos e passamos a ela um parâmetro na forma de um objeto. Em seguida, atribuímos a função reativa à variável geolocalização . Depois de fazer isso, podemos chamar a função fornecer e passar o nome da propriedade e o valor dos dados que queremos transmitir.

Na primeira função fornecer , definimos o nome da propriedade como 'local' e definimos seu valor igual a local , que é o valor que atribuímos à função ref .

Enquanto na segunda função fornecer , definimos seu nome de propriedade como 'geolocalização' e seu valor igual a geolocalização , que é o valor que atribuímos à função reativa .

Quando usar o par de funções fornecer / injetar

  • Se o aplicativo tiver um estado bastante simples e usar Vuex seria um exagero
  • Se seu aplicativo tiver muitos níveis de componentes e os componentes intermediários, não use os dados antes de serem passados ​​para o componente desejado
  • Se os dados forem usados ​​apenas por alguns componentes. Mas se os dados forem usados ​​por muitos mais componentes, o Vuex seria uma solução melhor

Aprendemos como usar o par de funções fornecer / injetar para passar dados entre componentes profundamente aninhados no Vue.js 3 com a API de composição. Abordamos como torná-lo reativo e também os diferentes casos de uso para quando você deve usá-lo. Para saber mais sobre o par de funções fornecer / injetar , visite a documentação oficial .

A postagem Usando fornecer / inject no Vue.js 3 com a API de composição apareceu primeiro no LogRocket Blog .

Source link