Skip to content

Commit b1e2347

Browse files
committed
Review in guide/render-function
1 parent 585a472 commit b1e2347

File tree

1 file changed

+45
-44
lines changed

1 file changed

+45
-44
lines changed

src/guide/render-function.md

Lines changed: 45 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
# Funções de Renderização
22

3-
Vue recomenda o uso de templates para construir aplicações na grande maioria dos casos. No entanto, existem situações onde precisamos de todo o poder programático do JavaScript. É aí onde podemos utilizar a **função de renderização**.
3+
Vue recomenda o uso de _templates_ para construir aplicações na grande maioria dos casos. No entanto, existem situações onde precisamos de todo o poder programático do JavaScript. É aí onde podemos utilizar a **função de renderização**.
44

5-
Vamos mergulhar em um exemplo onda uma função `render()` seria prática. Digamos que queremos gerar um título ancorado:
5+
Vamos mergulhar em um exemplo onde uma função `render()` seria prática. Digamos que queremos gerar um título ancorados:
66

77
```html
88
<h1>
99
<a name="hello-world" href="#hello-world">
10-
Hello world!
10+
Olá mundo!
1111
</a>
1212
</h1>
1313
```
1414

15-
Títulos ancorados são usados frequentemente, nós poderíamos criar um componente:
15+
Títulos ancorados são usados frequentemente, deveríamos criar um componente:
1616

1717
```vue-html
18-
<anchored-heading :level="1">Hello world!</anchored-heading>
18+
<anchored-heading :level="1">Olá mundo!</anchored-heading>
1919
```
2020

21-
O componente deve gerar um título baseado na propriedade `level`, e, nós rapidamente chegaríamos aqui:
21+
O componente deve gerar um título baseado na propriedade `level`, e nós rapidamente chegaríamos nisso:
2222

2323
```js
2424
const app = Vue.createApp({})
@@ -53,9 +53,9 @@ app.component('anchored-heading', {
5353
})
5454
```
5555

56-
Este template não parece bom. Não apenas é verboso, como também estamos duplicando o `<slot></slot>` para cada nível de título. E quando adicionarmos o elemento de âncora, teríamos que duplicá-lo em cada ramo `v-if/v-else-if`.
56+
Este _template_ não parece bom. Não apenas é verboso, como também estamos duplicando o `<slot></slot>` para cada nível de título. E quando adicionarmos o elemento de âncora, teríamos que duplicá-lo em cada ramo `v-if/v-else-if`.
5757

58-
Enquanto que templates funcionam muito bem para a maioria dos componentes, fica claro que este não é um deles. Então, vamos tentar reescreve-lo com uma função `render()`:
58+
Enquanto que _templates_ funcionam muito bem para a maioria dos componentes, fica claro que este não é um deles. Então, vamos tentar reescrevê-lo com uma função `render()`:
5959

6060
```js
6161
const app = Vue.createApp({})
@@ -65,9 +65,9 @@ app.component('anchored-heading', {
6565
const { h } = Vue
6666

6767
return h(
68-
'h' + this.level, // tag name
69-
{}, // props/attributes
70-
this.$slots.default() // array of children
68+
'h' + this.level, // nome da tag
69+
{}, // propriedades/atributos
70+
this.$slots.default() // array de filhos
7171
)
7272
},
7373
props: {
@@ -79,29 +79,29 @@ app.component('anchored-heading', {
7979
})
8080
```
8181

82-
A implementação da função `render()` é muito mais simples, mas também requer mais familiaridade com as propriedades das instâncias de componentes. Nesse caso, você deve saber que quando você passar filhos sem uma diretiva `v-slot` para um componente, como o `Hello world!` dentro do `anchored-heading`, esses filhos serão armazenados na instância do componente em `$slots.default()`. Se você já não tiver feito ainda. **é recomendado ler a [API de propriedades de instância](../api/instance-properties.html) antes de mergulhar nas funções de renderização.**
82+
A implementação da função `render()` é muito mais simples, mas também requer mais familiaridade com as propriedades das instâncias dos componentes. Nesse caso, você deve saber que quando você passar filhos sem uma diretiva `v-slot` para um componente, como o `Olá mundo!` dentro do `anchored-heading`, esses filhos serão armazenados na instância do componente em `$slots.default()`. Se você já não tiver feito ainda, **é recomendado ler a [API de propriedades de instância](../api/instance-properties.html) antes de mergulhar nas funções de renderização.**
8383

84-
## A árvore DOM
84+
## A Árvore DOM
8585

86-
Antes de adentrarmos nas funções de renderização, é importante conhecer um pouco sobre como os navegadores funcionam. Veja esse exemplo de HTML:
86+
Antes de mergulharmos nas funções de renderização, é importante conhecer um pouco sobre como os navegadores funcionam. Veja esse HTML como exemplo:
8787

8888
```html
8989
<div>
90-
<h1>My title</h1>
91-
Some text content
92-
<!-- TODO: Add tagline -->
90+
<h1>Meu título</h1>
91+
Algum conteúdo em texto
92+
<!-- TODO: Adicionar slogan -->
9393
</div>
9494
```
9595

9696
Quando um navegador lê este código, ele compila uma [árvore de "nós DOM"](https://javascript.info/dom-nodes) para ajudá-lo a acompanhar tudo.
9797

9898
A árvore de nós DOM para o HTML acima se parece com isso:
9999

100-
![DOM Tree Visualization](/images/dom-tree.png)
100+
![Visualização da Árvore DOM](/images/dom-tree.png)
101101

102-
Cada elemento é uma nó. Cada trecho de texto é um nó. Até mesmo comentários são nós! Cada nó pode possuír filhos (i.e. cada nó pode conter outros nós).
102+
Cada elemento é um nó. Cada trecho de texto é um nó. Até mesmo comentários são nós! Cada nó pode possuír filhos (i.e. cada nó pode conter outros nós).
103103

104-
Atualizar todos esses nós eficientemente pode ser difícil, mas felizmente, nós nunca precisamos fazê-lo manualmente. Ao invés disso, nós dizemos ao Vue qual HTML nós queremos na página, em um template:
104+
Atualizar todos esses nós eficientemente pode ser difícil, mas felizmente, nós nunca precisamos fazê-lo manualmente. Ao invés disso, nós dizemos ao Vue qual HTML nós queremos na página, em um _template_:
105105

106106
```html
107107
<h1>{{ blogTitle }}</h1>
@@ -115,19 +115,19 @@ render() {
115115
}
116116
```
117117

118-
E em ambos os casos, o Vue automaticamente mantem a página atualizada, até mesmo quando o `blogTitle` muda.
118+
E em ambos os casos, o Vue automaticamente mantém a página atualizada, até mesmo quando o `blogTitle` muda.
119119

120-
## A árvore Virtual DOM
120+
## A Árvore Virtual DOM
121121

122-
Vue mantem a página atualizada compilando um **DOM virtual** para acompanhar as mudanças que necessita para fazer o DOM real. Olhando a seguinte linha mais de perto:
122+
Vue mantém a página atualizada compilando um **DOM virtual** para acompanhar as mudanças que necessita para fazer o DOM real. Olhando a seguinte linha mais de perto:
123123

124124
```js
125125
return Vue.h('h1', {}, this.blogTitle)
126126
```
127127

128-
O que função `h()` retorna? Não é _exatamente_ um elemento DOM real. Ela retorna um objeto que contém informações que descrevem para o Vue que tipo de nó deve ser renderizado na página, incluíndo descrições de qualquer nó filho. Chamamos essa descrição do nó de "nó virtual", geralmente abreviado para **_VNode_**. "Virtual DOM" é como chamamos toda a árvore de _VNodes_, constituída de uma árvore de componentes Vue.
128+
O que a função `h()` retorna? Não é _exatamente_ um elemento DOM real. Ela retorna um objeto que contém informações que descrevem para o Vue que tipo de nó deve ser renderizado na página, incluíndo descrições de qualquer nó filho. Chamamos essa descrição do nó de "nó virtual", geralmente abreviado para **_VNode_**. "Virtual DOM" é como chamamos toda a árvore de _VNodes_, constituída de uma árvore de componentes Vue.
129129

130-
## Argumentos de `h()`
130+
## Argumentos do `h()`
131131

132132
A função `h()`é um utilitário para criar _VNodes_. Poderia, talvez, ser nomeado com mais precisão como `createVNode()`, mas é chamada `h()` devido ao uso frequente e por brevidade. Ela aceita três argumentos:
133133

@@ -150,7 +150,7 @@ h(
150150

151151
// {String | Array | Object} children
152152
// VNodes filhos, construídos usando `h()`,
153-
// ou usando strings to obter 'VNodes de texto' ou
153+
// ou usando strings para obter 'VNodes de texto' ou
154154
// um objeto com slots.
155155
//
156156
// Opcional.
@@ -164,7 +164,7 @@ h(
164164
)
165165
```
166166

167-
## Exemplo completo
167+
## Exemplo Completo
168168

169169
Com este conhecimento, podemos agora finalizar o componente que começamos:
170170

@@ -214,15 +214,15 @@ app.component('anchored-heading', {
214214

215215
## Restrições
216216

217-
### VNodes devem ser únicos
217+
### VNodes Devem Ser Únicos
218218

219219
Todos os _VNodes_ na árvore de componentes devem ser únicos. Isso significa que a função de renderização a seguir é inválida:
220220

221221
```js
222222
render() {
223223
const myParagraphVNode = Vue.h('p', 'hi')
224224
return Vue.h('div', [
225-
// Éca - VNodes duplicados!
225+
// Eita - VNodes duplicados!
226226
myParagraphVNode, myParagraphVNode
227227
])
228228
}
@@ -240,10 +240,11 @@ render() {
240240
}
241241
```
242242

243-
## Substituíndo Templates de recursos por JavaScript Simples
243+
## Substituíndo Recursos de _Templates_ com JavaScript Simples
244+
244245
### `v-if` e `v-for`
245246

246-
Sempre que algo for facilmente realizado usando JavaScript simples, as funções de renderização do Vue não são uma alternativa apropriada. Por exemplo, em um template usando `v-if` e `v-for`:
247+
Sempre que algo for facilmente realizado usando JavaScript simples, as funções de renderização do Vue não são uma alternativa apropriada. Por exemplo, em um _template_ usando `v-if` e `v-for`:
247248

248249
```html
249250
<ul v-if="items.length">
@@ -252,7 +253,7 @@ Sempre que algo for facilmente realizado usando JavaScript simples, as funções
252253
<p v-else>Não foram encontrados itens.</p>
253254
```
254255

255-
Pode ser rescrito usando usando `if`/`else` e `map()` com JavaScript em uma função de renderização:
256+
Pode ser rescrito usando `if`/`else` e `map()` com JavaScript em uma função de renderização:
256257

257258
```js
258259
props: ['items'],
@@ -269,7 +270,7 @@ render() {
269270

270271
### `v-model`
271272

272-
A diretiva `v-model` é expandida para as propriedades `modelValue`e `onUpdate:modelValue` durante a compilação do template - nós mesmos teremos que prover essas propriedades:
273+
A diretiva `v-model` é expandida para as propriedades `modelValue`e `onUpdate:modelValue` durante a compilação do _template_ - nós mesmos teremos que prover essas propriedades:
273274

274275
```js
275276
props: ['modelValue'],
@@ -283,7 +284,7 @@ render() {
283284

284285
### `v-on`
285286

286-
Temos que prover o propriedade com nome apropriado para o manipulador do evento, e.g., para manipular um evento de `click`, o nome da propriedade deve ser `onClick`.
287+
Temos que prover um nome de propriedade adequado para o manipulador do evento, e.g., para manipular um evento de `click`, o nome da propriedade deve ser `onClick`.
287288

288289
```js
289290
render() {
@@ -295,7 +296,7 @@ render() {
295296

296297
#### Modificadores de Eventos
297298

298-
Os modificadores de evento `.passive`, `.capture` e `.once`, podem ser concatenados após o nome do evento usando grafia camelo (_camel case_).
299+
Os modificadores de evento `.passive`, `.capture` e `.once`, podem ser concatenados após o nome do evento usando _camel case_.
299300

300301
Por exemplo:
301302

@@ -316,7 +317,7 @@ Para todos os outros modificadores de evento, não é necessária nenhuma API es
316317
| `.stop` | `event.stopPropagation()` |
317318
| `.prevent` | `event.preventDefault()` |
318319
| `.self` | `if (event.target !== event.currentTarget) return` |
319-
| Teclas:<br>`.enter`, `.13` | `if (event.keyCode !== 13) return` (mude `13` para [outro código de tecla](http://keycode.info/) para outro modificador de tecla) |
320+
| Teclas:<br>`.enter`, `.13` | `if (event.keyCode !== 13) return` (mude `13` para [outro código de tecla](http://keycode.info/) para outros modificadores de teclas) |
320321
| Modificadores de teclas:<br>`.ctrl`, `.alt`, `.shift`, `.meta` | `if (!event.ctrlKey) return` (mude `ctrlKey` para `altKey`, `shiftKey`, ou `metaKey`, respectivamente) |
321322

322323
Aqui temos um exemplo de todos esses modificadores sendo usados juntos:
@@ -326,7 +327,7 @@ render() {
326327
return Vue.h('input', {
327328
onKeyUp: event => {
328329
// Aborta se o elemento emitindo o evento não é
329-
// o elemento em qual o evento é ligado
330+
// o elemento em qual o evento está ligado
330331
if (event.target !== event.currentTarget) return
331332
// Aborta se a tecla que foi pressionada não é a tecla enter
332333
// (13) e a tecla shift não está sendo segurada
@@ -388,17 +389,17 @@ Vue.h(
388389
{
389390
level: 1
390391
},
391-
[Vue.h('span', 'Hello'), ' world!']
392+
[Vue.h('span', 'Olá'), ' mundo!']
392393
)
393394
```
394395

395-
Especialmente quando a versão usando template é mais concisa em comparação:
396+
Especialmente quando a versão usando _template_ é mais concisa em comparação:
396397

397398
```vue-html
398-
<anchored-heading :level="1"> <span>Hello</span> world! </anchored-heading>
399+
<anchored-heading :level="1"> <span>Olá</span> mundo! </anchored-heading>
399400
```
400401

401-
É por isso que existe um [_plugin_ Babel](https://github.com/vuejs/jsx-next) para usar JSX com Vue, nos colocando em uma sintaxe que é mais próxima dos templates:
402+
É por isso que existe um [_plugin_ Babel](https://github.com/vuejs/jsx-next) para usar JSX com Vue, nos colocando em uma sintaxe que é mais próxima dos _templates_:
402403

403404
```jsx
404405
import AnchoredHeading from './AnchoredHeading.vue'
@@ -407,7 +408,7 @@ const app = createApp({
407408
render() {
408409
return (
409410
<AnchoredHeading level={1}>
410-
<span>Hello</span> world!
411+
<span>Olá</span> mundo!
411412
</AnchoredHeading>
412413
)
413414
}
@@ -418,8 +419,8 @@ app.mount('#demo')
418419

419420
Para saber mais sobre como JSX mapeia para o JavaScript, veja a [documentação de uso](https://github.com/vuejs/jsx-next#installation).
420421

421-
## Compilação de Template
422+
## Compilação de _Template_
422423

423-
Pode ser que você esteja interessando em saber que o Vue, na verdade, compila os templates em funções de renderização. Isso é um detalhe de implementação que, geralmente, você não precisa saber, porém, se você quiser ver como especificamente templates são compilados, você pode achar interessante. Abaixo temos uma pequena demonstração de uso de `Vue.compile` para compilar em tempo real (_live-compile_) uma string de template:
424+
Pode ser que você esteja interessando em saber que o Vue, na verdade, compila os _templates_ em funções de renderização. Isso é um detalhe de implementação que, geralmente, você não precisa saber, porém, se você quiser ver como recursos específicos de _templates_ são compilados, você pode achar interessante. Abaixo temos uma pequena demonstração de uso de `Vue.compile` para compilar em tempo real uma string de _template_:
424425

425426
<iframe src="https://vue-next-template-explorer.netlify.app/" width="100%" height="420"></iframe>

0 commit comments

Comments
 (0)