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
+11-11Lines changed: 11 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,19 +1,19 @@
1
1
# Aprofundando-se na Reatividade
2
2
3
-
Agora é o momento de mergulhar fundo! Uma das características mais distintas do Vue é o seu discreto sistema de reatividade. _Models_ são _proxies_ de objetos JavaScript. Quando você os modifica, a _view_ é atualizada. Isso faz com que a administração de estado seja simples e intuitiva, porém é importante entender como isso funciona para evitar algumas pegadinhas. Nesta seção, vamos nos aprofundar em alguns dos detalhes de baixo nível do sistema de reatividade do Vue.
3
+
Agora é o momento de mergulhar fundo! Uma das características mais distintas do Vue é o seu discreto sistema de reatividade. Models são _proxies_ de objetos JavaScript. Quando você os modifica, a _view_ é atualizada. Isso faz com que a administração de estado seja simples e intuitiva, porém é importante entender como isso funciona para evitar algumas pegadinhas. Nesta seção, vamos nos aprofundar em alguns dos detalhes de baixo nível do sistema de reatividade do Vue.
4
4
5
5
<VideoLessonhref="https://www.vuemastery.com/courses/vue-3-reactivity/vue3-reactivity"title="Aprenda a fundo como a reatividade funciona com o Vue Mastery">Assista um vídeo gratuito sobre Aprofundando-se na Reatividade no Vue Mastery</VideoLesson>
6
6
7
7
## O Que é Reatividade?
8
8
9
-
Esse termo aparece na programação com uma certa frequência atualmente, mas o que as pessoas entendem por isso? Reatividade é um paradigma de programação que nos permite nos ajustar a mudanças de uma maneira declarativa. O exemplo canônico que as pessoas geralmente mostram, por ser um ótimo exemplo, é uma planilha do excel.
9
+
Esse termo aparece na programação com uma certa frequência atualmente, mas o que é que as pessoas entendem por isso? Reatividade é um paradigma de programação que nos permite nos ajustar a mudanças de uma maneira declarativa. O exemplo canônico geralmente mostrado, por ser um ótimo exemplo, é uma planilha do excel.
Seu navegador não possui suporte para a tag video.
14
14
</video>
15
15
16
-
Se você colocar o número dois na primeira célula, e o número 3 na segunda e então utilizar o SUM, a planilha te dará o resultado. Nenhuma surpresa aqui. Mas se você atualizar o primeiro número, o SUM é automagicamente atualizado.
16
+
Se você colocar o número dois na primeira célula, e o número 3 na segunda e então utilizar o SUM, a planilha te dará o resultado. Até aqui nada demais. Mas se você atualizar o primeiro número, o SUM é automagicamente atualizado.
17
17
18
18
O JavaScript, geralmente, não funciona assim -- Se escrevêssemos algo semelhante em Javascript:
19
19
@@ -31,17 +31,17 @@ val1 = 3
31
31
// 5
32
32
```
33
33
34
-
Se atualizarmos o primeiro valor, a soma não é ajustada.
34
+
Ao atualizarmos o primeiro valor, a soma não é ajustada.
35
35
36
-
Então como fazemos isso em JavaScript?
36
+
Então, como fazemos isso em JavaScript?
37
37
38
38
- Detecte quando há uma mudança em algum dos valores
39
39
- Rastreie a função que o modifica
40
40
- Dispare a função de modo que ela possa atualizar o valor final
41
41
42
42
## Como o Vue Rastreia Essas Mudanças
43
43
44
-
Quando você passa um objeto Javascript simples para uma aplicação ou instância de componente, como sua opção `data`, o Vue irá iterar sobre todas as suas propriedades e irá convertê-las em [Proxies](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy) utilizando um _handler_ com getters e setters. Isso é uma _feature_ do ES6, somente, mas nos oferecemos uma versão do Vue 3 que utiliza o `Object.defineProperty` mais antigo, para dar suporte a navegadores IE. Ambas possuem a mesma API, na superfície, mas a versão com Proxy é mais elegante e oferece melhor performance.
44
+
Quando você passa um objeto Javascript simples para uma aplicação ou instância de componente, como sua opção `data`, o Vue irá iterar sobre todas as suas propriedades e irá convertê-las em [Proxies](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy) utilizando um _handler_ com getters e setters. Isso é uma _feature_ do ES6, somente, mas nós oferecemos uma versão do Vue 3 que utiliza o `Object.defineProperty` mais antigo, para dar suporte a navegadores IE. Ambas possuem a mesma API, na superfície, mas a versão com Proxy é mais elegante e oferece melhor performance.
45
45
46
46
<divclass="reactivecontent">
47
47
<iframeheight="500"style="width: 100%;"scrolling="no"title="Proxies e a Reatividade do Vue Explicados Visualmente"src="https://codepen.io/sdras/embed/zYYzjBg?height=500&theme-id=light&default-tab=result"frameborder="no"allowtransparency="true"allowfullscreen="true">
@@ -71,7 +71,7 @@ console.log(proxy.meal)
71
71
// tacos
72
72
```
73
73
74
-
Ok, até agora, estamos apenas encapsulando o objeto e o retornando. Legal, mas ainda não muito útil. Mas observe isso, nós também podemos interceptar este objetos enquanto temos ele encapsulado no Proxy. Essa interceptação é chamada de armadilha (_trap_).
74
+
Ok, até agora, estamos apenas encapsulando o objeto e o retornando. Legal, mas ainda não muito útil. Mas observe isso, nós também podemos interceptar esse objeto enquanto temos ele encapsulado no Proxy. Essa interceptação é chamada de armadilha (_trap_).
75
75
76
76
```js
77
77
constdinner= {
@@ -170,7 +170,7 @@ O objeto com o _proxy_ aplicado é invisível para o usuário, mas por baixo dos
170
170
171
171
### Objetos com o Proxy aplicado
172
172
173
-
O Vue rastreia internamente todos os objetos que foram transformados em reativos, então ele sempre retorna o mesmo proxy para o mesmo objeto.
173
+
O Vue rastreia internamente todos os objetos que foram transformados em reativos, então ele sempre retorna o mesmo proxy de um mesmo objeto.
174
174
175
175
Quando um objeto aninhado é acessado através de um proxy reativo, esse objeto é _também_ convertido em um proxy antes de ser retornado:
176
176
@@ -200,9 +200,9 @@ const wrapped = new Proxy(obj, handlers)
200
200
console.log(obj === wrapped) // false
201
201
```
202
202
203
-
A versão original e a versão encapsulada se comportarão da mesma forma na maioria dos casos, mas esteja ciente de que elas irão falhar em operações que dependem de comparações fortes de identidade, como `.filter()` ou `.map()`. Esse empecilho tem pouca chance de ocorrer quando da utilização a API de opções, porque todo o estado reativo é acessado a partir do `this` e é garantido que já sejam _proxies_.
203
+
A versão original e a versão encapsulada se comportarão da mesma forma na maioria dos casos, mas esteja ciente de que elas irão falhar em operações que dependem de comparações fortes de identidade, como `.filter()` ou `.map()`. Esse empecilho tem pouca chance de ocorrer quando a API de opções estiver sendo utilizada, porque todo o estado reativo é acessado a partir do `this` e é garantido que já sejam _proxies_.
204
204
205
-
Entretanto, quanto utilizando a API de composição para criar objetos reativos explicitamente, a melhor prática é a de nunca guardar uma referência para o objeto cru original e trabalhar somente com a versão reativa:
205
+
Entretanto, quanto estiver utilizando a API de composição para criar objetos reativos explicitamente, a melhor prática é a de nunca guardar uma referência para o objeto cru original e trabalhar somente com a versão reativa:
206
206
207
207
```js
208
208
constobj=reactive({
@@ -216,7 +216,7 @@ Toda instância de componente tem uma instância de observador correspondente, q
216
216
217
217
<divclass="reactivecontent">
218
218
<iframeheight="500"style="width: 100%;"scrolling="no"title="Explicação da Segunda Reatividade com Proxies no Vue 3"src="https://codepen.io/sdras/embed/GRJZddR?height=500&theme-id=light&default-tab=result"frameborder="no"allowtransparency="true"allowfullscreen="true">
219
-
See the Pen <a href='https://codepen.io/sdras/pen/GRJZddR'>Explicação da Segunda Reatividade com Proxies no Vue 3</a> por Sarah Drasner
219
+
Veja o Pen <a href='https://codepen.io/sdras/pen/GRJZddR'>Explicação da Segunda Reatividade com Proxies no Vue 3</a> por Sarah Drasner
220
220
(<a href='https://codepen.io/sdras'>@sdras</a>) no <a href='https://codepen.io'>CodePen</a>.
0 commit comments