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
Copy file name to clipboardExpand all lines: src/guide/reactivity.md
+23-23
Original file line number
Diff line number
Diff line change
@@ -26,7 +26,7 @@ console.log(sum) // 5
26
26
27
27
val1 =3
28
28
29
-
console.log(sum) //Still 5
29
+
console.log(sum) //Ainda 5
30
30
```
31
31
32
32
Ao atualizarmos o primeiro valor, a soma não é ajustada.
@@ -53,58 +53,58 @@ const updateSum = () => {
53
53
}
54
54
```
55
55
56
-
But how do we tell Vue about this function?
56
+
Mas como informamos o Vue sobre essa função?
57
57
58
-
Vue keeps track of which function is currently running by using an *effect*. An effect is a wrapper around the function that initiates tracking just before the function is called. Vue knows which effect is running at any given point and can run it again when required.
58
+
O Vue mantém o controle de qual função está sendo executada usando um *efeito*. Um efeito é um _wrapper_ em torno da função que inicia o rastreamento logo antes de a função ser chamada. O Vue sabe qual efeito está sendo executado em um determinado ponto e pode executá-lo novamente quando necessário.
59
59
60
-
To understand that better, let's try to implement something similar ourselves, without Vue, to see how it might work.
60
+
Para entender melhor, vamos tentar implementar algo semelhante nós mesmos, sem o Vue, para ver como pode funcionar.
61
61
62
-
What we need is something that can wrap our sum, like this:
62
+
O que precisamos é de algo que possa envolver nossa soma, assim:
63
63
64
64
```js
65
65
createEffect(() => {
66
66
sum = val1 + val2
67
67
})
68
68
```
69
69
70
-
We need`createEffect`to keep track of when the sum is running. We might implement it something like this:
70
+
Precisamos de`createEffect`para acompanhar quando a soma está sendo executada. Podemos implementar algo assim:
71
71
72
72
```js
73
-
//Maintain a stack of running effects
73
+
//Mantém uma pilha de efeitos em execução
74
74
construnningEffects= []
75
75
76
76
constcreateEffect=fn=> {
77
-
//Wrap the passed fn in an effect function
77
+
//Envolve o fn passado em uma função de efeito
78
78
consteffect= () => {
79
79
runningEffects.push(effect)
80
80
fn()
81
81
runningEffects.pop()
82
82
}
83
83
84
-
//Automatically run the effect immediately
84
+
//Executa automaticamente o efeito imediatamente
85
85
effect()
86
86
}
87
87
```
88
88
89
-
When our effect is called it pushes itself onto the`runningEffects` array, before calling `fn`. Anything that needs to know which effect is currently running can check that array.
89
+
Quando nosso efeito é chamado, ele se adiciona ao array`runningEffects`, antes de chamar `fn`. Qualquer coisa que precise saber qual efeito está sendo executado no momento pode verificar esse array.
90
90
91
-
Effects act as the starting point for many key features. For example, both component rendering and computed properties use effects internally. Any time something magically responds to data changes you can be pretty sure it has been wrapped in an effect.
91
+
Os efeitos atuam como ponto de partida para muitos recursos importantes. Por exemplo, tanto a renderização do componente quanto os dados computados usam efeitos internamente. Sempre que algo responde magicamente a alterações de dados, você pode ter certeza de que foi envolvido em um efeito.
92
92
93
-
While Vue's public API doesn't include any way to create an effect directly, it does expose a function called `watchEffect`that behaves a lot like the `createEffect`function from our example. We'll discuss that in more detail [later in the guide](/guide/reactivity-computed-watchers.html#watcheffect).
93
+
Embora a API pública do Vue não inclua nenhuma maneira de criar um efeito diretamente, ela expõe uma função chamada `watchEffect`que se comporta muito como a função `createEffect`do nosso exemplo. Discutiremos isso com mais detalhes [mais adiante no guia](/guide/reactivity-computed-watchers.html#watcheffect).
94
94
95
-
But knowing what code is running is just one part of the puzzle. How does Vue know what values the effect uses and how does it know when they change?
95
+
Mas saber qual código está sendo executado é apenas uma parte do quebra-cabeça. Como o Vue sabe quais valores o efeito usa e como ele sabe quando eles mudam?
96
96
97
97
## Como o Vue Rastreia Essas Mudanças
98
98
99
99
Não podemos rastrear reatribuições de variáveis locais como aquelas em nossos exemplos anteriores, simplesmente não há mecanismo para fazer isso em JavaScript. O que podemos rastrear são as mudanças nas propriedades do objeto.
100
100
101
-
Quando retornamos um objeto JavaScript simples da função de `data` de um componente, O Vue envolverá esse objeto em um [Proxy](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy) com manipuladores para `get` e `set`. Os proxies foram introduzidos no ES6 e permitem que o Vue 3 evite algumas das limitações de reatividade que existiam nas versões anteriores do Vue.
101
+
Quando retornamos um objeto JavaScript simples da função de `data` de um componente, O Vue envolverá esse objeto em um [Proxy](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Proxy) com manipuladores para `get` e `set`. Os proxies foram introduzidos no ES6 e permitem que o Vue 3 evite algumas das limitações de reatividade que existiam nas versões anteriores do Vue.
102
102
103
103
<divclass="reactivecontent">
104
104
<common-codepen-snippettitle="Proxies e a Reatividade do Vue Explicados Visualmente"slug="VwmxZXJ"tab="result"theme="light":height="500":editable="false":preview="false" />
105
105
</div>
106
106
107
-
A explicação anterior foi breve e requer algum conhecimento de [Proxies](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy) para ser entendida! Então vamos nos aprofundar um pouco. Há muita literatura sobre Proxies, mas o que você realmente precisa saber é que um **Proxy é um objeto que encapsula um outro objeto ou função e permite que você o intercepte.**
107
+
A explicação anterior foi breve e requer algum conhecimento de [Proxies](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Proxy) para ser entendida! Então vamos nos aprofundar um pouco. Há muita literatura sobre Proxies, mas o que você realmente precisa saber é que um **Proxy é um objeto que encapsula um outro objeto ou função e permite que você o intercepte.**
108
108
109
109
Nós o utilizamos assim: `new Proxy(target, handler)`
110
110
@@ -231,11 +231,11 @@ vm.val1 = 3
231
231
console.log(vm.sum) // 6
232
232
```
233
233
234
-
The object returned by`data`will be wrapped in a reactive proxy and stored as `this.$data`. The properties`this.val1`and`this.val2`are aliases for`this.$data.val1`and`this.$data.val2`respectively, so they go through the same proxy.
234
+
O objeto retornado por`data`será encapsulado em um proxy reativo e armazenado como `this.$data`. As propriedades`this.val1`e`this.val2`são apelidos para`this.$data.val1`e`this.$data.val2`respectivamente, então elas passam pelo mesmo proxy.
235
235
236
-
Vue will wrap the function for `sum`in an effect. When we try to access `this.sum`, it will run that effect to calculate the value. The reactive proxy around `$data`will track that the properties `val1`and`val2`were read while that effect is running.
236
+
Vue envolverá a função para `sum`em um efeito. Quando tentamos acessar `this.sum`, ele executará esse efeito para calcular o valor. O proxy reativo em torno de `$data`rastreará se as propriedades `val1`e`val2`foram lidas enquanto o efeito está sendo executado.
237
237
238
-
As of Vue 3, our reactivity is now available in a [separate package](https://github.com/vuejs/vue-next/tree/master/packages/reactivity). The function that wraps`$data`in a proxy is called [`reactive`](/api/basic-reactivity.html#reactive). We can call this directly ourselves, allowing us to wrap an object in a reactive proxy without needing to use a component:
238
+
A partir do Vue 3, nossa reatividade agora está disponível em um [pacote separado](https://github.com/vuejs/vue-next/tree/master/packages/reactivity). A função que envolve`$data`em um proxy é chamada de [`reactive`](/api/basic-reactivity.html#reactive). Podemos chamar isso diretamente nós mesmos, permitindo-nos envolver um objeto em um proxy reativo sem precisar usar um componente:
239
239
240
240
```js
241
241
constproxy=reactive({
@@ -244,7 +244,7 @@ const proxy = reactive({
244
244
})
245
245
```
246
246
247
-
We'll explore the functionality exposed by the reactivity package over the course of the next few pages of this guide. That includes functions like`reactive`and`watchEffect`that we've already met, as well as ways to use other reactivity features, such as `computed`and`watch`, without needing to create a component.
247
+
Exploraremos a funcionalidade exposta pelo pacote de reatividade ao longo das próximas páginas deste guia. Isso inclui funções como`reactive`e`watchEffect`que já conhecemos, bem como formas de usar outros recursos de reatividade, como `computed`e`watch`, sem a necessidade de criar um componente.
Toda instância de componente tem uma instância de observador correspondente, que registra quaisquer propriedades "tocadas" durante a renderização do componente como dependências. Depois, quando um setter de uma dependência é disparado, ele notifica o observador, que por sua vez faz o componente re-renderizar.
307
307
308
-
## How Rendering Reacts to Changes
308
+
## Como a Renderização Reage às Mudanças
309
309
310
-
The template for a component is compiled down into a[`render`](/guide/render-function.html) function. The `render`function creates the [VNodes](/guide/render-function.html#the-virtual-dom-tree) that describe how the component should be rendered. It is wrapped in an effect, allowing Vue to track the properties that are 'touched' while it is running.
310
+
O _template_ para um componente é compilado em uma função[`render`](/guide/render-function.html). A função `render`cria os [VNodes](/guide/render-function.html#a-arvore-virtual-dom) que descrevem como o componente deve ser renderizado. Ele é envolvido em um efeito, permitindo que o Vue rastreie as propriedades que são 'tocadas' enquanto ele está em execução.
311
311
312
-
A `render`function is conceptually very similar to a`computed` property. Vue doesn't track exactly how dependencies are used, it only knows that they were used at some point while the function was running. If any of those properties subsequently changes, it will trigger the effect to run again, re-running the `render`function to generate new VNodes. These are then used to make the necessary changes to the DOM.
312
+
Uma função `render`é conceitualmente muito semelhante a uma propriedade`computed`. O Vue não rastreia exatamente como as dependências são usadas, ele apenas sabe que elas foram usadas em algum momento enquanto a função estava em execução. Se qualquer uma dessas propriedades for alterada posteriormente, o efeito será acionado novamente, executando novamente a função `render`para gerar novos VNodes. Estes são então usados para fazer as alterações necessárias no DOM.
313
313
314
314
<divclass="reactivecontent">
315
-
<common-codepen-snippettitle="Second Reactivity with Proxies in Vue 3 Explainer"slug="wvgqyJK"tab="result"theme="light":height="500":editable="false":preview="false" />
315
+
<common-codepen-snippettitle="Segundo Explicador da Reatividade com Proxies no Vue 3"slug="wvgqyJK"tab="result"theme="light":height="500":editable="false":preview="false" />
316
316
</div>
317
317
318
318
> Se você está utilizando Vue v2.x ou mais antigo, pode estar interessado em alguns empecilhos da detecção de mudanças que existem nessas versões, [explorados em mais detalhes aqui](change-detection.md).
0 commit comments