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
"setNotes" traduz-se, grosso modo, como "definirNotas"
23
-
- Versão reduzida: "defNotas"
24
-
*/
25
20
26
21
return (
27
22
<div>
@@ -50,7 +45,7 @@ const App = (props) => {
50
45
51
46
Também podemos usar o "React Developer Tools" para ver o que realmente está acontecendo:
52
47
53
-

48
+

54
49
55
50
Se quiséssemos inicializá-la com uma lista vazia de notas, definiríamos o valor inicial como um array vazio e, como as props não seriam utilizadas, poderíamos omitir o parâmetro <em>props</em> da definição da função:
56
51
@@ -72,9 +67,8 @@ const App = (props) => {
72
67
73
68
// highlight-start
74
69
constaddNote= (event) => {
75
-
//"addNote" traduz-se, grosso modo, como "adicionarNota"
76
70
event.preventDefault()
77
-
console.log('botão clicado', event.target)
71
+
console.log('button clicked', event.target)
78
72
}
79
73
// highlight-end
80
74
@@ -102,21 +96,21 @@ Adicionamos a função _addNote_ como um gerenciador de evento ao elemento de fo
102
96
Usamos o método discutido na [Parte 1](/en/part1/component_state_event_handlers#event-handling) para definir nosso gerenciador de evento:
103
97
104
98
```js
105
-
constaddNote= (evento) => {
106
-
evento.preventDefault()
107
-
console.log('botão clicado', evento.target)
99
+
constaddNote= (event) => {
100
+
event.preventDefault()
101
+
console.log('button clicked', event.target)
108
102
}
109
103
```
110
104
111
-
O parâmetro <em>event</em> é o [event](https://reactjs.org/docs/handling-events.html) (evento) que aciona a chamada para a função gerenciadora de evento:
105
+
O parâmetro <em>event</em> é o [evento](https://reactjs.org/docs/handling-events.html) que aciona a chamada para a função gerenciadora de evento:
112
106
113
-
O gerenciador de evento chama imediatamente o método <em>event.preventDefault()</em>, o que "impede a ação padrão" (prevents the default action) de enviar um formulário. A ação padrão causaria, [entre outras coisas](https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement/submit_event), a recarga da página.
107
+
O gerenciador de evento chama imediatamente o método <em>event.preventDefault()</em>, o que "impede a ação padrão" de enviar um formulário. A ação padrão causaria, [entre outras coisas](https://developer.mozilla.org/en-US/docs/Web/API/HTMLFormElement/submit_event), o recarregamento da página.
114
108
115
-
O alvo do evento armazenado em _event.target_ é registrado no console:
109
+
O alvo (target) do evento armazenado em _event.target_ é registrado no console:
116
110
117
111

118
112
119
-
O alvo neste caso é o formulário que definimos em nosso componente.
113
+
O <i>target</i> neste caso é o formulário que definimos em nosso componente.
120
114
121
115
Como acessamos os dados armazenados no elemento <i>input</i> do formulário?
122
116
@@ -131,17 +125,13 @@ const App = (props) => {
131
125
const [notes, setNotes] =useState(props.notes)
132
126
// highlight-start
133
127
const [newNote, setNewNote] =useState(
134
-
/*
135
-
"newNote" traduz-se como "novaNota"
136
-
"setNewNote" traduz-se, grosso modo, como "defNovaNota"
137
-
*/
138
-
'uma nova nota...'
128
+
'a new note...'
139
129
)
140
130
// highlight-end
141
131
142
132
constaddNote= (event) => {
143
133
event.preventDefault()
144
-
console.log('botão clicado', event.target)
134
+
console.log('button clicked', event.target)
145
135
}
146
136
147
137
return (
@@ -165,21 +155,21 @@ O texto do espaço reservado armazenado como o valor inicial do estado <em>newNo
165
155
166
156

167
157
168
-
A partir do momento que atribuímos um pedaço do estado do componente <i>App</i> como o atributo <i>value</i> do elemento de entrada (input element), o componente <i>App</i> passou a controlar o comportamento do elemento de entrada.
158
+
A partir do momento em que atribuímos um pedaço do estado do componente <i>App</i> como o atributo <i>value</i> do elemento de entrada (input element), o componente <i>App</i> passou a controlar o comportamento do elemento de entrada.
169
159
170
160
Para habilitar a edição do elemento de entrada, precisamos registrar um <i>gerenciador de evento</i> que sincroniza as mudanças feitas na entrada com o estado do componente:
171
161
172
162
```js
173
163
constApp= (props) => {
174
164
const [notes, setNotes] =useState(props.notes)
175
165
const [newNote, setNewNote] =useState(
176
-
'uma nova nota...'
166
+
'a new note...'
177
167
)
178
168
179
169
// ...
180
170
181
171
// highlight-start
182
-
consthandleNoteChange= (event) => { // ou "gerEntradaDeNota"
172
+
consthandleNoteChange= (event) => {
183
173
console.log(event.target.value)
184
174
setNewNote(event.target.value)
185
175
}
@@ -251,9 +241,9 @@ const addNote = (event) => {
251
241
}
252
242
```
253
243
254
-
Primeiramente, criamos um novo objeto para a nota (variável que cria as notas com suas propriedades) chamada <em>noteObject</em> (ou "objetoNota") que receberá seu conteúdo do estado <em>newNote</em> do componente. O identificador único <i>id</i> é gerado com base no número total de notas. Este método funciona para a nossa aplicação, já que as nossas notas nunca são excluídas. Com a ajuda da função <em>Math.random()</em>, a nossa nota tem 50% de chance de ser marcada como importante.
244
+
Primeiramente, criamos um novo objeto para a nota (variável que cria as notas com suas propriedades) chamada <em>noteObject</em> que receberá seu conteúdo do estado <em>newNote</em> do componente. O identificador único <i>id</i> é gerado com base no número total de notas. Este método funciona para a nossa aplicação, já que as nossas notas nunca são excluídas. Com a ajuda da função <em>Math.random()</em>, a nossa nota tem 50% de chance de ser marcada como importante.
255
245
256
-
A nova nota é adicionada à lista de notas usando o método de array [concat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat) (concatenar), apresentado na [Parte 1](/ptbr/part1/java_script#arrays):
246
+
A nova nota é adicionada à lista de notas usando o método de array [concat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat), apresentado na [Parte 1](/ptbr/part1/java_script#arrays):
257
247
258
248
```js
259
249
setNotes(notes.concat(noteObject))
@@ -269,18 +259,17 @@ setNewNote('')
269
259
270
260
É possível encontrar o código atual completo da nossa aplicação na branch <i>part2-2</i> [neste repositório do GitHub](https://github.com/fullstack-hy2020/part2-notes/tree/part2-2).
271
261
272
-
### Filtragem dos elementos exibidos
262
+
### Filtrando os elementos exibidos
273
263
274
264
Vamos adicionar algumas novas funcionalidades à nossa aplicação que nos permitam visualizar apenas as notas importantes.
275
265
276
-
Vamos adicionar um pedaço de estado ao componente <i>App</i> que vai manter o registro das notas que devem ser exibidas:
266
+
Vamos adicionar um estado ao componente <i>App</i> que vai manter o registro das notas que devem ser exibidas:
// "exibirTudo" e "defExibirTudo", respectivamente.
284
273
285
274
// ...
286
275
}
@@ -301,7 +290,6 @@ const App = (props) => {
301
290
302
291
// highlight-start
303
292
constnotesToShow= showAll
304
-
// "notesToShow" traduz-se como "notasParaExibir"
305
293
? notes
306
294
:notes.filter(note=>note.important===true)
307
295
// highlight-end
@@ -330,13 +318,13 @@ const notesToShow = showAll
330
318
331
319
A definição utiliza o operador [condicional](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator) (ou operador ternário) encontrado também em muitas outras linguagens de programação.
332
320
333
-
O operador funciona da seguinte maneira. Se tivermos...
321
+
O operador funciona da seguinte maneira. Se tivermos
334
322
335
323
```js
336
324
constresult= condition ? val1 : val2
337
325
```
338
326
339
-
... a variável <em>result</em> será definida com o valor de <em>val1</em> se <em>condition</em> for verdadeiro. Se <em>condition</em> for falso, a variável <em>result</em> será definida com o valor de <em>val2</em>.
327
+
a variável <em>result</em> será definida com o valor de <em>val1</em> se <em>condition</em> for verdadeiro. Se <em>condition</em> for falso, a variável <em>result</em> será definida com o valor de <em>val2</em>.
340
328
341
329
Se o valor de <em>showAll</em> for falso, a variável <em>notesToShow</em> será atribuída a uma lista que contém somente as notas que possuem a propriedade <em>important</em> definida como verdadeira. A filtragem é feita com a ajuda do método de array [filter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter) (filtrar):
342
330
@@ -363,7 +351,7 @@ import { useState } from 'react'
363
351
importNotefrom'./components/Note'
364
352
365
353
constApp= (props) => {
366
-
const [notes, setNotes] =useState(props.notes)
354
+
const [notes, setNotes] =useState(props.notes)
367
355
const [newNote, setNewNote] =useState('')
368
356
const [showAll, setShowAll] =useState(true)
369
357
@@ -376,7 +364,7 @@ const App = (props) => {
376
364
<div>
377
365
<button onClick={() =>setShowAll(!showAll)}>
378
366
show {showAll ?'important':'all' }
379
-
{/* exibirTudo ? 'importante' : 'tudo' */}
367
+
380
368
</button>
381
369
</div>
382
370
// highlight-end
@@ -453,7 +441,7 @@ export default App
453
441
454
442
O estado <em>newName</em> é destinado a controlar o elemento de entrada do formulário.
455
443
456
-
Pode ser útil às vezes renderizar o estado e outras variáveis, como texto, para fins de depuração. Você pode adicionar temporariamente o seguinte elemento ao componente renderizado:
444
+
Pode ser útil renderizar o estado e outras variáveis, como texto, para fins de depuração. Você pode adicionar temporariamente o seguinte elemento ao componente renderizado:
457
445
458
446
```
459
447
<div>debug: {newName}</div>
@@ -467,16 +455,16 @@ Depois de concluir este exercício, sua aplicação deve ficar mais ou menos par
467
455
468
456
Atente-se ao uso da extensão "React developer tools" na imagem acima!
469
457
470
-
**N.B. (Nota Bene):**
458
+
**Obs.:**
471
459
472
460
- Você pode usar o nome da pessoa como um valor da propriedade <i>key</i>; e
473
-
- Lembre-se de impedir a ação padrão de envio de formulários HTML! (preventDefault)
461
+
- Lembre-se de impedir a ação padrão de envio de formulários HTML (preventDefault)!
474
462
475
463
<h4>2.7: The Phonebook — 2º passo</h4>
476
464
477
465
Impeça que o usuário adicione nomes que já existam na lista telefônica. JavaScript têm inúmeros [métodos](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array) adequados para realizar esta tarefa. Tenha em mente [como funciona a igualdade de objetos](https://www.joshbritz.co/posts/why-its-so-hard-to-check-object-equality/) em JavaScript.
478
466
479
-
Emita uma aviso com o comando [alert](https://developer.mozilla.org/en-US/docs/Web/API/Window/alert) (alerta) quando o usuário tentar fazer isso:
467
+
Emita um aviso com o comando [alert](https://developer.mozilla.org/en-US/docs/Web/API/Window/alert) (alerta) quando o usuário tentar fazer isso:
480
468
481
469

482
470
<i>Tradução do alerta em tela: "Arto Hellas já foi adicionado à lista telefônica"</i>
@@ -485,7 +473,6 @@ Emita uma aviso com o comando [alert](https://developer.mozilla.org/en-US/docs/W
485
473
486
474
```js
487
475
`${newName} is already added to phonebook`
488
-
// `${newName} já foi adicionado(a) à lista telefônica!`
489
476
```
490
477
491
478
Se a variável <em>newName</em> contiver o valor <i>Arto Hellas</i>, a expressão template string retornará a string:
@@ -500,11 +487,11 @@ O mesmo pode ser feito de um "jeito mais Java" usando o operador de soma (+):
500
487
newName +' is already added to phonebook'
501
488
```
502
489
503
-
Template strings é a opção mais idiomática, além de que seu uso é o sinal que representa um verdadeiro profissional JavaScript.
490
+
Template strings é a opção mais idiomática, além de que seu uso é o indício de um verdadeiro profissional JavaScript.
504
491
505
492
<h4>2.8: The Phonebook — 3º passo</h4>
506
493
507
-
Expanda sua aplicação permitindo com que os usuários adicionem números de telefone à lista telefônica. Você precisará adicionar um segundo elemento de <i>entrada</i> (input) ao formulário (junto com seu próprio gerenciador de evento):
494
+
Expanda sua aplicação permitindo que os usuários adicionem números de telefone à lista telefônica. Você precisará adicionar um segundo elemento de <i>entrada</i> (input) ao formulário (junto com seu próprio gerenciador de evento):
508
495
509
496
```js
510
497
<form>
@@ -526,7 +513,7 @@ Implemente um campo de pesquisa que possa ser usado para filtrar a lista de pess
526
513
527
514
Você pode implementar o campo de pesquisa como um elemento <i>input</i> que é colocado fora do formulário HTML. A lógica de filtragem mostrada na imagem é <i>case insensitive</i>, o que significa que se você pesquisar por <i>arto</i>, também há o retorno de resultados que contêm "Arto" com o A maiúsculo.
528
515
529
-
**N.B.:** Quando se está trabalhando em uma nova funcionalidade, é útil inserir em sua aplicação um "código de teste" — como alguns dados fantasiosos de pessoas — desta forma:
516
+
**Obs.:** Quando se está trabalhando em uma nova funcionalidade, é útil inserir em sua aplicação um "código de teste" — como alguns dados fantasiosos de pessoas — desta forma:
530
517
531
518
```js
532
519
constApp= () => {
@@ -575,6 +562,6 @@ const App = () => {
575
562
}
576
563
```
577
564
578
-
**N.B.**: Você pode ter problemas neste exercício se definir seus componentes "no lugar errado". Agora, é definitivamente uma boa ideia revisar o capítulo da seção anterior: [Não defina Componentes dentro de Componentes](/ptbr/part1/um_estado_mais_complexo_e_depuracao_de_aplicacoes_react#nao-defina-componentes-dentro-de-componentes).
565
+
**Obs.:**: Você pode ter problemas neste exercício se definir seus componentes "no lugar errado". Agora, é definitivamente uma boa ideia revisar o capítulo da seção anterior: [Não defina Componentes dentro de Componentes](/ptbr/part1/um_estado_mais_complexo_e_depuracao_de_aplicacoes_react#nao-defina-componentes-dentro-de-componentes).
0 commit comments