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-computed-watchers.md
+73-73Lines changed: 73 additions & 73 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,21 +1,21 @@
1
-
# Computed and Watch
1
+
# Dados Computados e Observadores
2
2
3
-
> This section uses [single-file component](single-file-component.html)syntax for code examples
3
+
> Esta seção usa a sintaxe de [componente de single-file](single-file-component.html)para exemplos de código
4
4
5
-
## Computed values
5
+
## Valores computados
6
6
7
-
Sometimes we need state that depends on other state - in Vue this is handled with component [computed properties](computed.html#computed-properties). To directly create a computed value, we can use the`computed` function: it takes a getter function and returns an immutable reactive [ref](reactivity-fundamentals.html#creating-standalone-reactive-values-as-refs)object for the returned value from the getter.
7
+
Às vezes precisamos de um estado que depende de outro estado - no Vue isso é tratado com [dados computados](computed.html#computed-properties) do componente. Para criar diretamente um valor computado, podemos usar a função`computed`: ela pega uma função _getter_ e retorna um objeto reativo imutável [ref](reactivity-fundamentals.html#criacao-de-valores-reativos-avulsos-como-refs)para o valor retornado do _getter_.
8
8
9
9
```js
10
10
constcount=ref(1)
11
11
constplusOne=computed(() =>count.value+1)
12
12
13
13
console.log(plusOne.value) // 2
14
14
15
-
plusOne.value++//error
15
+
plusOne.value++//erro
16
16
```
17
17
18
-
Alternatively, it can take an object with `get`and`set`functions to create a writable ref object.
18
+
Alternativamente, ele pode receber um objeto com as funções `get`e`set`para criar um objeto _ref_ modificável.
19
19
20
20
```js
21
21
constcount=ref(1)
@@ -30,102 +30,102 @@ plusOne.value = 1
30
30
console.log(count.value) // 0
31
31
```
32
32
33
-
### Computed Debugging <Badgetext="3.2+" />
33
+
### Depuração de Computados <Badgetext="3.2+" />
34
34
35
-
`computed`accepts a second argument with `onTrack`and`onTrigger` options:
35
+
`computed`aceita um segundo argumento com as opções `onTrack`e`onTrigger`:
36
36
37
-
-`onTrack`will be called when a reactive property or ref is tracked as a dependency.
38
-
-`onTrigger`will be called when the watcher callback is triggered by the mutation of a dependency.
37
+
-`onTrack`será chamado quando uma propriedade reativa ou _ref_ for rastreada como uma dependência.
38
+
-`onTrigger`será chamado quando o _callback_ do observador for acionado pela mutação de uma dependência.
39
39
40
-
Both callbacks will receive a debugger event which contains information on the dependency in question. It is recommended to place a `debugger`statement in these callbacks to interactively inspect the dependency:
40
+
Ambos os _callbacks_ receberão um evento depurador que contém informações sobre a dependência em questão. Recomenda-se colocar uma instrução `debugger`nesses _callbacks_ para inspecionar interativamente a dependência:
41
41
42
42
```js
43
43
constplusOne=computed(() =>count.value+1, {
44
44
onTrack(e) {
45
-
//triggered when count.value is tracked as a dependency
45
+
//acionado quando count.value é rastreado como uma dependência
46
46
debugger
47
47
},
48
48
onTrigger(e) {
49
-
//triggered when count.value is mutated
49
+
//acionado quando count.value é modificado
50
50
debugger
51
51
}
52
52
})
53
53
54
-
//access plusOne, should trigger onTrack
54
+
//acessa plusOne, deve acionar onTrack
55
55
console.log(plusOne.value)
56
56
57
-
//mutate count.value, should trigger onTrigger
57
+
//muda count.value, deve acionar onTrigger
58
58
count.value++
59
59
```
60
60
61
-
`onTrack`and`onTrigger`only work in development mode.
61
+
`onTrack`e`onTrigger`só funcionam no modo de desenvolvimento.
62
62
63
63
## `watchEffect`
64
64
65
-
To apply and _automatically re-apply_ a side effect based on reactive state, we can use the`watchEffect` function. It runs a function immediately while reactively tracking its dependencies and re-runs it whenever the dependencies are changed.
65
+
Para aplicar e _automaticamente reaplicar_ um efeito colateral baseado no estado reativo, podemos usar a função`watchEffect`. Ela executa uma função imediatamente enquanto rastreia de forma reativa suas dependências e a executa novamente sempre que as dependências são alteradas.
66
66
67
67
```js
68
68
constcount=ref(0)
69
69
70
70
watchEffect(() =>console.log(count.value))
71
-
// -> logs 0
71
+
// -> loga 0
72
72
73
73
setTimeout(() => {
74
74
count.value++
75
-
// -> logs 1
75
+
// -> loga 1
76
76
}, 100)
77
77
```
78
78
79
-
### Stopping the Watcher
79
+
### Parando o Observador
80
80
81
-
When`watchEffect`is called during a component's[setup()](composition-api-setup.html)function or [lifecycle hooks](composition-api-lifecycle-hooks.html), the watcher is linked to the component's lifecycle and will be automatically stopped when the component is unmounted.
81
+
Quando`watchEffect`é chamado durante a função[setup()](composition-api-setup.html)de um componente ou [gatilhos do ciclo de vida](composition-api-lifecycle-hooks.html), o observador é vinculado ao ciclo de vida do componente e será interrompido automaticamente quando o componente for desmontado.
82
82
83
-
In other cases, it returns a stop handle which can be called to explicitly stop the watcher:
83
+
Em outros casos, ele retorna um manipulador de parada que pode ser chamado para parar explicitamente o observador:
84
84
85
85
```js
86
86
conststop=watchEffect(() => {
87
87
/* ... */
88
88
})
89
89
90
-
//later
90
+
//depois
91
91
stop()
92
92
```
93
93
94
-
### Side Effect Invalidation
94
+
### Invalidação de Efeito Colateral
95
95
96
-
Sometimes the watched effect function will perform asynchronous side effects that need to be cleaned up when it is invalidated (i.e. state changed before the effects can be completed). The effect function receives an `onInvalidate`function that can be used to register an invalidation callback. This invalidation callback is called when:
96
+
Às vezes, a função do efeito observado executará efeitos colaterais assíncronos que precisam ser limpos quando forem invalidados (ou seja, estado alterado antes que os efeitos possam ser concluídos). A função de efeito recebe uma função `onInvalidate`que pode ser usada para registrar um _callback_ de invalidação. Esse _callback_ de invalidação é chamado quando:
97
97
98
-
-the effect is about to re-run
99
-
-the watcher is stopped (i.e. when the component is unmounted if `watchEffect`is used inside `setup()`or lifecycle hooks)
98
+
-o efeito está prestes a ser executado novamente
99
+
-o observador é parado (ou seja, quando o componente é desmontado se `watchEffect`for usado dentro de `setup()`ou gatilhos de ciclo de vida)
100
100
101
101
```js
102
102
watchEffect(onInvalidate=> {
103
103
consttoken=performAsyncOperation(id.value)
104
104
onInvalidate(() => {
105
-
// id has changed or watcher is stopped.
106
-
//invalidate previously pending async operation
105
+
// id foi alterado ou o observador está parado.
106
+
//invalida a operação assíncrona pendente anteriormente
107
107
token.cancel()
108
108
})
109
109
})
110
110
```
111
111
112
-
We are registering the invalidation callback via a passed-in function instead of returning it from the callback because the return value is important for async error handling. It is very common for the effect function to be an async function when performing data fetching:
112
+
Estamos registrando o _callback_ de invalidação por meio de uma função passada em vez de retorná-lo do _callback_ porque o valor retornado é importante para o tratamento de erros assíncronos. É muito comum que a função de efeito seja uma função assíncrona ao realizar a requisição de dados:
113
113
114
114
```js
115
115
constdata=ref(null)
116
116
watchEffect(asynconInvalidate=> {
117
117
onInvalidate(() => {
118
118
/* ... */
119
-
}) //we register cleanup function before Promise resolves
119
+
}) //registramos a função de limpeza antes que a Promise seja resolvida
120
120
data.value=awaitfetchData(props.id)
121
121
})
122
122
```
123
123
124
-
An async function implicitly returns a Promise, but the cleanup function needs to be registered immediately before the Promise resolves. In addition, Vue relies on the returned Promise to automatically handle potential errors in the Promise chain.
124
+
Uma função assíncrona retorna implicitamente uma Promise, mas a função de limpeza precisa ser registrada imediatamente antes que a Promise seja resolvida. Além disso, o Vue depende da Promise retornada para lidar automaticamente com possíveis erros na cadeia de Promises.
125
125
126
-
### Effect Flush Timing
126
+
### Momento de Limpeza do Efeito
127
127
128
-
Vue's reactivity system buffers invalidated effects and flushes them asynchronously to avoid unnecessary duplicate invocation when there are many state mutations happening in the same "tick". Internally, a component's`update`function is also a watched effect. When a user effect is queued, it is by default invoked**before**all component `update`effects:
128
+
O sistema de reatividade do Vue armazena em _buffer_ os efeitos invalidados e os libera de forma assíncrona para evitar invocação duplicada desnecessária quando há muitas mutações de estado acontecendo no mesmo "tick". Internamente, a função`update`de um componente também é um efeito observado. Quando um efeito de usuário é enfileirado, ele é invocado por padrão**antes**de todos os efeitos de `update`do componente:
129
129
130
130
```vue
131
131
<template>
@@ -149,17 +149,17 @@ export default {
149
149
</script>
150
150
```
151
151
152
-
In this example:
152
+
Neste exemplo:
153
153
154
-
-The count will be logged synchronously on initial run.
155
-
-When`count`is mutated, the callback will be called **before**the component has updated.
154
+
-A contagem será registrada de forma síncrona na execução inicial.
155
+
-Quando`count`for modificado, o callback será chamado **antes**de o componente ser atualizado.
156
156
157
-
In cases where a watcher effect needs to be re-run **after**component updates (i.e. when working with [Template Refs](./composition-api-template-refs.md#watching-template-refs)), we can pass an additional`options`object with the `flush`option (default is`'pre'`):
157
+
Nos casos em que um efeito de observador precisa ser executado novamente **após**atualizações de componentes (ou seja, ao trabalhar com [_Refs_ de _Template_](./composition-api-template-refs.md#observando-refs-de-template)), nós podemos passar um objeto`options`adicional com a opção `flush`(o padrão é`'pre'`):
158
158
159
159
```js
160
-
//fire after component updates so you can access the updated DOM
161
-
//Note: this will also defer the initial run of the effect until the
162
-
//component's first render is finished.
160
+
//dispara após atualizações de componentes para que você possa acessar o DOM atualizado
161
+
//Nota: isso também adiará a execução inicial do efeito até
162
+
//a primeira renderização do componente ser finalizada.
163
163
watchEffect(
164
164
() => {
165
165
/* ... */
@@ -170,23 +170,23 @@ watchEffect(
170
170
)
171
171
```
172
172
173
-
The `flush`option also accepts `'sync'`, which forces the effect to always trigger synchronously. This is however inefficient and should be rarely needed.
173
+
A opção `flush`também aceita `'sync'`, o que força o efeito a sempre disparar de forma síncrona. No entanto, isso é ineficiente e raramente deve ser necessário.
174
174
175
-
In Vue >= 3.2.0, `watchPostEffect`and`watchSyncEffect`aliases can also be used to make the code intention more obvious.
175
+
No Vue >= 3.2.0, os apelidos `watchPostEffect`e`watchSyncEffect`também podem ser usados para tornar a intenção do código mais óbvia.
176
176
177
-
### Watcher Debugging
177
+
### Depuração do Observador
178
178
179
-
The `onTrack`and`onTrigger`options can be used to debug a watcher's behavior.
179
+
As opções `onTrack`e`onTrigger`podem ser usadas para depurar o comportamento de um observador.
180
180
181
-
-`onTrack`will be called when a reactive property or ref is tracked as a dependency.
182
-
-`onTrigger`will be called when the watcher callback is triggered by the mutation of a dependency.
181
+
-`onTrack`será chamado quando uma propriedade reativa ou _ref_ for rastreada como uma dependência.
182
+
-`onTrigger`será chamado quando o _callback_ do observador for acionado pela mutação de uma dependência.
183
183
184
-
Both callbacks will receive a debugger event which contains information on the dependency in question. It is recommended to place a `debugger`statement in these callbacks to interactively inspect the dependency:
184
+
Ambos os _callbacks_ receberão um evento depurador que contém informações sobre a dependência em questão. Recomenda-se colocar uma instrução `debugger`nesses _callbacks_ para inspecionar interativamente a dependência:
185
185
186
186
```js
187
187
watchEffect(
188
188
() => {
189
-
/*side effect*/
189
+
/*efeito colateral*/
190
190
},
191
191
{
192
192
onTrigger(e) {
@@ -196,24 +196,24 @@ watchEffect(
196
196
)
197
197
```
198
198
199
-
`onTrack`and`onTrigger`only work in development mode.
199
+
`onTrack`e`onTrigger`só funcionam no modo de desenvolvimento.
200
200
201
201
## `watch`
202
202
203
-
The `watch`API is the exact equivalent of the component [watch](computed.html#watchers) property. `watch`requires watching a specific data source and applies side effects in a separate callback function. It also is lazy by default - i.e. the callback is only called when the watched source has changed.
203
+
A API `watch`é o equivalente exato da propriedade [watch](computed.html#observadores) do componente. `watch`requer a observação de uma fonte de dados específica e aplica efeitos colaterais em um _callback_ separado. Também é preguiçoso por padrão - ou seja, o _callback_ só é chamado quando a fonte observada foi alterada.
204
204
205
-
-Compared to[watchEffect](#watcheffect), `watch`allows us to:
However, if you are changing both watched sources simultaneously in the same function, the watcher will be executed only once:
248
+
No entanto, se você estiver alterando as duas fontes observadas simultaneamente na mesma função, o observador será executado apenas uma vez:
249
249
250
250
```js{9-13}
251
251
setup() {
@@ -266,9 +266,9 @@ setup() {
266
266
}
267
267
```
268
268
269
-
Note that multiple synchronous changes will only trigger the watcher once.
269
+
Observe que várias alterações síncronas acionarão o observador apenas uma vez.
270
270
271
-
It is possible to force the watcher to trigger after every change by using the setting `flush: 'sync'`, though that isn't usually recommended. Alternatively, [nextTick](/api/global-api.html#nexttick)can be used to wait for the watcher to run before making further changes. e.g.:
271
+
É possível forçar o observador a disparar após cada mudança usando a configuração `flush: 'sync'`, embora isso geralmente não seja recomendado. Como alternativa, [nextTick](/api/global-api.html#nexttick)pode ser usado para aguardar a execução do observador antes de fazer outras alterações. por exemplo.:
However, watching a reactive object or array will always return a reference to the current value of that object for both the current and previous value of the state. To fully watch deeply nested objects and arrays, a deep copy of values may be required. This can be achieved with a utility such as[lodash.cloneDeep](https://lodash.com/docs/4.17.15#cloneDeep)
326
+
No entanto, observar um objeto ou array reativo sempre retornará uma referência ao valor atual desse objeto para ambos o valor atual e anterior do estado. Para observar completamente objetos e arrays profundamente aninhados, pode ser necessária uma cópia profunda dos valores. Isso pode ser feito com um utilitário como[lodash.cloneDeep](https://lodash.com/docs/4.17.15#cloneDeep)
327
327
328
328
```js
329
329
import_from'lodash'
@@ -342,9 +342,9 @@ watch(
342
342
}
343
343
)
344
344
345
-
state.attributes.name='Alex'//Logs: "Alex" ""
345
+
state.attributes.name='Alex'//Loga: "Alex" ""
346
346
```
347
347
348
-
### Shared Behavior with`watchEffect`
348
+
### Comportamento Compartilhado com`watchEffect`
349
349
350
-
`watch`shares behavior with[`watchEffect`](#watcheffect)in terms of [manual stoppage](#stopping-the-watcher), [side effect invalidation](#side-effect-invalidation) (with`onInvalidate`passed to the callback as the 3rd argument instead), [flush timing](#effect-flush-timing) and [debugging](#watcher-debugging).
350
+
`watch`compartilha comportamento com[`watchEffect`](#watcheffect)em termos de [parada manual](#parando-o-observador), [invalidação de efeito colateral](#invalidacao-de-efeito-colateral) (com`onInvalidate`passado ao _callback_ como o terceiro argumento), [momento de limpeza](#momento-de-limpeza-do-efeito) e [depuração](#depuracao-do-observador).
0 commit comments