Skip to content

Commit 5da5480

Browse files
committed
Review on guide/change-detection
1 parent 242903a commit 5da5480

File tree

1 file changed

+31
-31
lines changed

1 file changed

+31
-31
lines changed

src/guide/change-detection.md

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,50 @@
1-
# Advertência de Alterações Detectadas no Vue 2
1+
# Limitações na Detecção de Mudanças na v2
22

3-
> Esta página se aplica apenas para o Vue 2.x e inferiores, e assume que você já tenha lido a [Seção de Reatividade](reactivity.md). Por favor leia esta seção primeiro.
3+
> Esta página se aplica apenas ao Vue 2.x e inferiores, e assume que você já tenha lido a [Seção de Reatividade](reactivity.md). Por favor leia esta seção primeiro.
44
55
Devido a limitações no Javascript, existem alguns tipos de mudanças que o Vue **não consegue detectar**. No entanto, existem formas de contorná-las para preservar a reatividade.
66

7-
### Para *Objects*
7+
### Para Objetos
88

9-
Vue não consegue detectar a inserçãoa ou remoção de propriedades. Como o Vue realiza o processo de conversão *getter*/*setter* durante a inicialização da instância, uma propriedade precisa estar presente no objeto `data` para que o Vue possa convertê-lo e torná-lo reativo. Por exemplo:
9+
Vue não consegue detectar a inserção ou remoção de propriedades. Como o Vue realiza o processo de conversão para *getter*/*setter* durante a inicialização da instância, uma propriedade precisa estar presente no objeto `data` para que o Vue possa convertê-lo e torná-lo reativo. Por exemplo:
1010

1111
```js
1212
var vm = new Vue({
1313
data: {
1414
a: 1
1515
}
1616
})
17-
// `vm.a` agora é reativa
17+
// `vm.a` agora é reativo
1818

1919
vm.b = 2
20-
// `vm.b` não é reativa
20+
// `vm.b` NÃO é reativo
2121
```
2222

23-
Vue não permite adicionar dinamicamente novas propriedades nível-raiz (*root-level*) a uma instância já criada. Contudo, é possível adicionar propriedades reativaas a um objeto aninhado usando o método `Vue.set(object, propertyName, value)`:
23+
Vue não permite adicionar dinamicamente novas propriedades ao nível raiz de uma instância já criada. Contudo, é possível adicionar propriedades reativas a um objeto aninhado usando o método `Vue.set(object, propertyName, value)`:
2424

2525
```js
2626
Vue.set(vm.someObject, 'b', 2)
2727
```
2828

29-
Você pode também utilizar o método da instância `vm.$set`, que é uma referência ao método global `Vue.set`:
29+
Você também pode utilizar o método de instância `vm.$set`, que é uma referência ao método global `Vue.set`:
3030

3131
```js
3232
this.$set(this.someObject, 'b', 2)
3333
```
3434

35-
Às vezes você pode querer atribuir mais de uma propriedade para um objeto existente, por exemplo usando `Object.assign()` ou `_.extend()`. No entanto, novas propriedades addicionadas ao objeto não irão acionar mudanças. Nestes casos, crie um objeto novo (*fresh object*) com propriedades de ambos o origial e o alterado (*mixing object*):
35+
Às vezes você pode querer atribuir mais de uma propriedade em um objeto existente, por exemplo usando `Object.assign()` ou `_.extend()`. No entanto, novas propriedades adicionadas ao objeto não irão acionar mudanças. Nestes casos, crie um objeto novo com propriedades de ambos o original e o alterado:
3636

3737
```js
3838
// invés de `Object.assign(this.someObject, { a: 1, b: 2 })`
3939
this.someObject = Object.assign({}, this.someObject, { a: 1, b: 2 })
4040
```
4141

42-
### Para *Arrays*
42+
### Para Arrays
4343

44-
Vue não consegue detectar as seguintes mudanças em um *array*:
44+
Vue não consegue detectar as seguintes mudanças em um array:
4545

46-
1. Quando você atribuir diretamente um item através do índice, e.g. `vm.items[indexOfItem] = newValue`
47-
2. Quando você modifica o comprimento de um *array*, e.g. `vm.items.length = newLength`
46+
1. Quando você atribui diretamente um item através do índice, e.g. `vm.items[indexOfItem] = newValue`
47+
2. Quando você modifica o comprimento do array, e.g. `vm.items.length = newLength`
4848

4949
Por exemplo:
5050

@@ -58,7 +58,7 @@ vm.items[1] = 'x' // NÃO é reativo
5858
vm.items.length = 2 // NÃO é reativo
5959
```
6060

61-
Para contornar a advertência 1, ambas instruções irão fazer o mesmo que `vm.items[indexOfItem] = newValue`, mas irão também acionar as atualizações no estado do sistema reativo:
61+
Para contornar a limitação 1, ambas as instruções seguintes farão o mesmo que `vm.items[indexOfItem] = newValue`, mas também acionarão as atualizações no estado do sistema reativo:
6262

6363
```js
6464
// Vue.set
@@ -76,20 +76,20 @@ Você pode também usar o método [`vm.$set`](https://vuejs.org/v2/api/#vm-set)
7676
vm.$set(vm.items, indexOfItem, newValue)
7777
```
7878

79-
Para lidar com a advertência 2, você pode usar o método `splice`:
79+
Para lidar com a limitação 2, você pode usar o método `splice`:
8080

8181
```js
8282
vm.items.splice(newLength)
8383
```
8484

8585
## Declarando Propriedades Reativas
8686

87-
Como o Vue não permite inserir propriedades de nível raíz (*root-level*) dinamicamente, você tem que inicializar a instância de um componente declarando todas as propriedades de nível raíz (*root-level*) já inicializadas, mesmo que com valores vazios:
87+
Como o Vue não permite inserir propriedades ao nível raiz dinamicamente, você tem que inicializar a instância de um componente declarando todas as propriedades de nível raiz já inicializadas, mesmo que com valores vazios:
8888

8989
```js
9090
var vm = new Vue({
9191
data: {
92-
// declara message com o valor vazio
92+
// declara `message` com o valor vazio
9393
message: ''
9494
},
9595
template: '<div>{{ message }}</div>'
@@ -98,15 +98,15 @@ var vm = new Vue({
9898
vm.message = 'Hello!'
9999
```
100100

101-
Se você não declarar a propriedade `message` no objeto data, Vue irá avisar você que a função *render* está tenntando acessar uma propriedade que não exite.
101+
Se você não declarar a propriedade `message` no objeto data, Vue te avisará que a função *render* está tentando acessar uma propriedade que não exite.
102102

103-
Existem razões técnicas por tráz desta restrição - elas eliminam um conjunto de casos extremos no sistema de rastreamento de dependências, além de fazer com que as istâncias dos componenntes funcionem melhor com o sistema de checagem de tipo. Porém há também uma consideração importante em termos de manutennção de código: o objeto `data` funciona como um *schema* para o estado do seu componente. Declarando todas as propriedades reativas inicialmente faz com que o código do componente seja mais fácil de entender quando revisitado posteriormente ou lido po outro desenvolvedor.
103+
Existem razões técnicas por tráz desta restrição - elas eliminam um conjunto de casos extremos no sistema de rastreamento de dependências, além de fazer com que as instâncias dos componenntes funcionem melhor com sistemas de checagem de tipos. Porém há também uma consideração importante em termos de manutenção de código: o objeto `data` funciona como um *schema* para o estado do seu componente. Declarando todas as propriedades reativas inicialmente faz com que o código do componente seja mais fácil de entender quando revisitado posteriormente ou lido por outro desenvolvedor.
104104

105-
## Fila de Atualização Assíncrona (*Async Update Queue*)
105+
## Fila de Atualizações Assíncrona
106106

107-
No caso de você não ter notado ainda, Vue realiza atualizações na DOM de forma **assíncrona**. Sempre que uma mudança de dados é observada, é aberta uma fila e armazenado em *buffer* todas as alterações que ocorreram no mesmo ciclo (*event loop*). Se o mesmo observador é acionado muitas vezes, ele será inserido na fila apenas uma vez. Essa eliminação de duplicatas em *buffer* é importante para evitar cálculos e manipulações da DOM desnecessários. Então, no próximo ciclo *"tick"*, Vue limpla a fila e executa o trabalho atual (já desduplicado). Internamente Vue tenta utilizar nativamente `Promise.then`, `MutationObserver`, e `setImmediate` para a enfileiração e retorna para o `setTimeout(fn, 0)`.
107+
No caso de você não ter notado ainda, Vue realiza atualizações no DOM **assincronamente**. Sempre que uma mudança de dados é observada, é aberta uma fila e armazenado em *buffer* todas as alterações que ocorreram no mesmo *loop* de eventos. Se o mesmo observador é acionado muitas vezes, ele será inserido na fila apenas uma vez. Essa eliminação de duplicatas em *buffer* é importante para evitar cálculos e manipulações do DOM desnecessários. Então, no próximo *"tick"* de *loop* de eventos, Vue esvazia a fila e executa o trabalho atual (já desduplicado). Internamente o Vue tenta utilizar nativamente `Promise.then`, `MutationObserver`, e `setImmediate` para a enfileiração e retorna para o `setTimeout(fn, 0)` em caso de pouco suporte.
108108

109-
Por exemplo, quando você atribui `vm.someData = 'new value'`, o componente não irá renderizar novamente de imadiato. Ele irá atualizar no próximo *"tick"*, quando a fila for limpa. Na maioria dos casos nós não precisamos nos preocupar com isso, mas isto pode complicar quando você quer fazer algo que dependa da pós-atualização do estado da DOM (*post-update DOM state*). Contudo Vue.js geralmente encoraja os desenvolvedores a pensar de um modo *"data-driven"* e evitar tocar na DOM diretamente, em alguns casos pode ser necessário sujar as mãos. A fim de esperar até o Vue.js ter finalizado a atualização da DOM depois de uma mudança de *data*, você pode usar `Vue.nextTick(callback)` imediatamente depois da mudança de *data*. O *callback* irá ser chamado depois que a DOM for atualizada. Por exemplo:
109+
Por exemplo, quando você atribui `vm.someData = 'new value'`, o componente não renderizará novamente de imediato. Ele irá atualizar no próximo *"tick"*, quando a fila for esvaziada. Na maioria dos casos nós não precisamos nos preocupar com isso, mas isto pode complicar quando você quer fazer algo que dependa do estado do DOM pós-atualização. Apesar de Vue.js geralmente encorajar os desenvolvedores a pensar de um modo *"data-driven"* e evitar tocar no DOM diretamente, em alguns casos pode ser necessário sujar as mãos. A fim de esperar até o Vue.js ter finalizado a atualização do DOM depois de uma mudança de dados, você pode usar `Vue.nextTick(callback)` imediatamente depois da mudança dos dados. O *callback* irá ser chamado depois que o DOM for atualizado. Por exemplo:
110110

111111
```html
112112
<div id="example">{{ message }}</div>
@@ -119,27 +119,27 @@ var vm = new Vue({
119119
message: '123'
120120
}
121121
})
122-
vm.message = 'new message' // altera data
123-
vm.$el.textContent === 'new message' // falso
122+
vm.message = 'new message' // modifica dados
123+
vm.$el.textContent === 'new message' // false
124124
Vue.nextTick(function() {
125-
vm.$el.textContent === 'new message' // verdadeiro
125+
vm.$el.textContent === 'new message' // true
126126
})
127127
```
128128

129-
Existe também o método da instância `vm.$nextTick()`, que é especialmente eficaz dentro de componentes, pois não precisa da global `Vue` e seus *calback's* e o contexto da variável `this`será automaticamente se limitar ao componente atual:
129+
Existe também o método de instância `vm.$nextTick()`, que é especialmente conveniente dentro de componentes, pois não precisa da global `Vue` e seus *callback's* e o contexto da variável `this` será automaticamente vinculado ao componente atual:
130130

131131
```js
132132
Vue.component('example', {
133133
template: '<span>{{ message }}</span>',
134134
data: function() {
135135
return {
136-
message: 'not updated'
136+
message: 'não atualizado'
137137
}
138138
},
139139
methods: {
140140
updateMessage: function() {
141-
this.message = 'updated'
142-
console.log(this.$el.textContent) // => 'não atualizad'
141+
this.message = 'atualizado'
142+
console.log(this.$el.textContent) // => 'não atualizado'
143143
this.$nextTick(function() {
144144
console.log(this.$el.textContent) // => 'atualizado'
145145
})
@@ -148,12 +148,12 @@ Vue.component('example', {
148148
})
149149
```
150150

151-
Como `$nextTick()` retorna uma *promise*, você pode ter o mesmo efeito acima usando a nova sitaxe [ES2017 async/await](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function):
151+
Como `$nextTick()` retorna uma *promise*, você pode ter o mesmo efeito que acima usando a nova sintaxe [ES2017 async/await](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function):
152152

153153
```js
154154
methods: {
155155
updateMessage: async function () {
156-
this.message = 'updated'
156+
this.message = 'atualizado'
157157
console.log(this.$el.textContent) // => 'não atualizado'
158158
await this.$nextTick()
159159
console.log(this.$el.textContent) // => 'atualizado'

0 commit comments

Comments
 (0)