You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
> This page assumes you've already read the [Components Basics](component-basics.md). Read that first if you are new to components.
3
+
> Esta página assume que você já leu o [Básico sobre Componentes](component-basics.md). Leia lá primeiro se você for novo em componentes.
4
4
5
-
Usually, when we need to pass data from the parent to child component, we use [props](component-props.md). Imagine the structure where you have some deeply nested components and you only need something from the parent component in the deep nested child. In this case, you still need to pass the prop down the whole component chain which might be annoying.
5
+
Normalmente, quando precisamos passar dados do componente pai para o filho, usamos [propriedades](component-props.md) (também conhecidas como _props_). Imagine a estrutura em que você tem alguns componentes profundamente aninhados e precisa de algo do componente pai apenas num componente filho que está profundamente aninhado. Nesse caso, você precisaria passar a propriedade por toda a cadeia de componentes, o que poderia ser irritante.
6
6
7
-
For such cases, we can use the`provide`and`inject` pair. Parent components can serve as dependency provider for all its children, regardless how deep the component hierarchy is. This feature works on two parts: parent component has a `provide`option to provide data and child component has an `inject`option to start using this data.
7
+
Nessas situações, podemos usar o par`provide`e`inject`. Os componentes pai podem servir como provedores de dependência para todos os seus filhos, independentemente da profundidade da hierarquia do componente. Este recurso funciona em duas partes: o componente pai tem uma opção `provide`para fornecer dados e o componente filho tem uma opção `inject`para usar esses dados.
Por exemplo, se tivéssemos uma hierarquia como esta:
12
12
13
13
```
14
-
Root
14
+
Raiz
15
15
└─ TodoList
16
16
├─ TodoItem
17
17
└─ TodoListFooter
18
18
├─ ClearTodosButton
19
19
└─ TodoListStatistics
20
20
```
21
21
22
-
If we want to pass the length of todo-items directly to`TodoListStatistics`, we would pass the prop down the hierarchy: `TodoList` -> `TodoListFooter` -> `TodoListStatistics`. With provide/inject approach, we can do this directly:
22
+
Se quiséssemos passar o tamanho da lista de tarefas diretamente para`TodoListStatistics`, passaríamos a propriedade por toda hierarquia: `TodoList` -> `TodoListFooter` -> `TodoListStatistics`. Com a abordagem de prover/injetar, podemos fazer isso diretamente:
23
23
24
24
```js
25
25
constapp=Vue.createApp({})
26
26
27
27
app.component('todo-list', {
28
28
data() {
29
29
return {
30
-
todos: ['Feed a cat', 'Buy tickets']
30
+
todos: ['Alimentar o gato', 'Comprar ingressos']
31
31
}
32
32
},
33
33
provide: {
@@ -36,44 +36,44 @@ app.component('todo-list', {
36
36
template:`
37
37
<div>
38
38
{{ todos.length }}
39
-
<!-- rest of the template -->
39
+
<!-- restante do _template_ -->
40
40
</div>
41
41
`
42
42
})
43
43
44
44
app.component('todo-list-statistics', {
45
45
inject: ['user'],
46
46
created() {
47
-
console.log(`Injected property: ${this.user}`) // > Injected property: John Doe
47
+
console.log(`Propriedade injetada: ${this.user}`) // > Propriedade injetada: John Doe
48
48
}
49
49
})
50
50
```
51
51
52
-
However, this won't work if we try to provide some component instance property here:
52
+
No entanto, isso não funcionará se tentarmos prover alguma propriedade da instância do componente:
53
53
54
54
```js
55
55
app.component('todo-list', {
56
56
data() {
57
57
return {
58
-
todos: ['Feed a cat', 'Buy tickets']
58
+
todos: ['Alimentar o gato', 'Comprar ingressos']
59
59
}
60
60
},
61
61
provide: {
62
-
todoLength:this.todos.length//this will result in error 'Cannot read property 'length' of undefined`
62
+
todoLength:this.todos.length//isso resultará no erro `Cannot read property 'length' of undefined`
63
63
},
64
64
template:`
65
65
...
66
66
`
67
67
})
68
68
```
69
69
70
-
To access component instance properties, we need to convert `provide`to be a function returning an object
70
+
Para acessar as propriedades da instância do componente, precisamos converter `provide`em uma função que retorna um objeto
71
71
72
72
```js
73
73
app.component('todo-list', {
74
74
data() {
75
75
return {
76
-
todos: ['Feed a cat', 'Buy tickets']
76
+
todos: ['Alimentar o gato', 'Comprar ingressos']
77
77
}
78
78
},
79
79
provide() {
@@ -87,16 +87,16 @@ app.component('todo-list', {
87
87
})
88
88
```
89
89
90
-
This allows us to more safely keep developing that component, without fear that we might change/remove something that a child component is relying on. The interface between these components remains clearly defined, just as with props.
90
+
Isso nos permite continuar desenvolvendo esse componente com mais segurança, sem medo de que possamos alterar/remover algo em que um componente filho dependa. A interface entre esses componentes permanece claramente definida, similar à `props`.
91
91
92
-
In fact, you can think of dependency injection as sort of “long-range props”, except:
92
+
Na verdade, você pode pensar na injeção de dependência como uma espécie de "`props` de longo alcance", exceto:
93
93
94
-
-parent components don’t need to know which descendants use the properties it provides
95
-
-child components don’t need to know where injected properties are coming from
94
+
-os componentes pai não precisam saber quais descendentes usam as propriedades que ele fornece
95
+
-os componentes filhos não precisam saber de onde vêm as propriedades injetadas
96
96
97
-
## Working with reactivity
97
+
## Trabalhando com Reatividade
98
98
99
-
In the example above, if we change the list of `todos`, this change won't be reflected in the injected`todoLength` property. This is because `provide/inject`bindings are _not_ reactive by default. We can change this behavior by passing a `ref`property or `reactive` object to `provide`. In our case, if we wanted to react to changes in the ancestor component, we would need to assign a Composition API `computed`property to our provided `todoLength`:
99
+
No exemplo acima, se alterarmos a lista de tarefas, essa alteração não será refletida na propriedade injetada`todoLength`. Isso ocorre porque as interligações `provide/inject`**não** são reativas por padrão. Podemos mudar esse comportamento passando uma propriedade `ref`ou objeto reativo (`reactive`) para `provide`. Em nosso exemplo, se quiséssemos reagir às mudanças no componente ancestral, precisaríamos atribuir um dado computado (usando o `computed`da API de Composição) para nosso `todoLength` fornecido:
100
100
101
101
```js
102
102
app.component('todo-list', {
@@ -109,4 +109,4 @@ app.component('todo-list', {
109
109
})
110
110
```
111
111
112
-
In this, any change to`todos.length`will be reflected correctly in the components, where`todoLength`is injected. Read more about `reactive`provide/inject in the [Composition API section](composition-api-provide-inject.html#injection-reactivity)
112
+
Assim, qualquer alteração em`todos.length`será refletida corretamente nos componentes, onde`todoLength`é injetado. Leia mais sobre `provide/inject` de forma reativa na [seção da API de Composição](composition-api-provide-inject.html#injection-reactivity)
0 commit comments