25
25
height : auto;
26
26
}
27
27
img {
28
- width : 30 vw ;
29
- height : 30 vh ;
28
+ width : 20 vw ;
29
+ height : 20 vh ;
30
30
}
31
31
32
32
# lingsDeProgramacao {
@@ -107,6 +107,11 @@ <h1><a href="#lista" id="lista" class="hash">Lista</a></h1>
107
107
< span class ="hl "> in</ span > - Deve ser uma string que vai indicar o valor do atributo id do elemento onde a lista
108
108
será renderizada.
109
109
</ li >
110
+ < li >
111
+ < span class ="hl "> optimize</ span > - Essa propriedade foi adicionada desde a versão
112
+ < a href ="https://github.com/interjs/inter/releases/tag/v2.2.3 " target ="_blank " class ="hash "> 2.2.3</ a > , ela serve para optimizar a performance da lista, vai até a parte
113
+ que fala sobre a < a href ="#opcao-optimize " class ="hash "> opção optimize</ a > nessa matéria para uma explicação mais detalhada.
114
+ </ li >
110
115
< li >
111
116
< span class ="hl "> each</ span > - Representa os dados em que a lista será baseada, o valor dessa propriedade pode
112
117
ser uma < span class ="hl "> Array</ span > , um < span class ="hl "> objecto</ span > , < span class ="hl "> Set</ span > ,
@@ -407,6 +412,97 @@ <h3>Lista dos teus amigos</h3>
407
412
408
413
< div class ="space "> </ div >
409
414
</ div >
415
+ < h3 id ="opcao-optimize "> < a href ="#opcao-optimize " id ="opcao-optimize " class ="hash "> Opção optimize</ a > </ h3 >
416
+ < div class ="warning ">
417
+ < p > Essa propriedade(opção) faz parte do Inter dese a versão
418
+ < span class ="hl "> 2.2.3</ span >
419
+ </ p >
420
+ </ div >
421
+ < p >
422
+ Quando a lista for super grande, de milhares de itens e os containeres correspondentes
423
+ à cada item tiverem inúmeros elementos aninhados, você vai notar uma certa queda de performance
424
+ ao atualisar a lista, com a propriedade < span class ="hl "> optimize</ span > definida para < span class ="hl "> true</ span >
425
+ a performance da lista no Inter vai até às nuvens! Mas esse ganho de performance tem uma desvantagem. Vê o exemplo:
426
+ </ p >
427
+
428
+ < textarea >
429
+
430
+ < div id ="estudantes "> </ div >
431
+ < script >
432
+
433
+ const estudantes = [
434
+ { nome : "Alberto Sampaio" , nota : 14 , professor : "João Costa" , novoProf : false } ,
435
+ { nome : "Angelina Guilherme" , nota : 8 }
436
+ ]
437
+
438
+ renderList ( {
439
+ in : "estudantes" ,
440
+ each : estudantes ,
441
+ optimize : true ,
442
+ do ( estudante ) {
443
+
444
+ const { nome, nota, professor, novoProf} = estudante
445
+ const buttonEvents = { onclick : ( ) => estudante . novoProf = true } ;
446
+ const done = { onclick : ( ) => estudante . novoProf = false } ;
447
+ const inputAttrs = { type : "text" , value : professor , placeholder : "Digite" } ;
448
+ const inputEvents = { oninput : ( e ) => estudante . professor = e . target . value }
449
+ const h4Text = `Estudante: ${ nome } ${ nota > 10 ? "passou de ano" : "vai repetir" } `
450
+
451
+ return template ( {
452
+ tag : "div" , children : [ {
453
+ tag : "h4" , text : h4Text
454
+ } , {
455
+ tag : "p" , text : `O professor: ${ this [ 0 ] . professor } `
456
+ } , {
457
+ tag : "button" , text : "novo Prof" , renderIf : novoProf == false ,
458
+ events : buttonEvents
459
+ } , {
460
+ tag : "div" , renderIf : novoProf , children : [ {
461
+ tag : "input" , attrs : inputAttrs , events : inputEvents
462
+ } , {
463
+ tag : "button" , text : "Feito" , events : done
464
+ } ]
465
+ } ]
466
+ } )
467
+ }
468
+ } )
469
+
470
+
471
+ </ script >
472
+ </ textarea >
473
+ < div class ="demo ">
474
+ < div id ="estudantes "> </ div >
475
+ < div class ="space "> </ div >
476
+ </ div >
477
+
478
+ < p > No exemplo anterior, nós usamos a opção < span class ="hl "> optimize</ span > para optimizar a listar,
479
+ que particularmente nesse caso é disnecessário só foi usado para exemplificar a desvantagem.
480
+ Nós temos a Array estudantes que vai ser usado como os dados da nossa lista, mas um detalhe curioso é que,
481
+ apenas o primeiro item(objecto) da lista tem as propriedades < span class ="hl "> professor</ span > e
482
+ < span class ="hl "> novoProf</ span > , tecnicamente não tinha como nós apresentarmos o valor da propriedade
483
+ professor no segundo elemento HTML da lista, baseando-se nas propriedades do segundo objecto, então nós usamos a
484
+ professor do primeiro objecto, até aí tudo bem, o outro porém, é que quando se usa a propriedade
485
+ < span class ="hl "> optimize</ span > por exemplo, se uma das propriedades
486
+ do primeiro item(objecto) da lista for alterada, o sistema
487
+ de renderização da lista vai atualizar apenas o elemento correspondente(o primeiro container),
488
+ já que o primeiro item da lista representa o primeiro elemento HTML da lista, assim
489
+ o sistema de renderização evita trabalho desnecessário ao procurar alterações em outros elementos HTML
490
+ da lista. No nosso exemplo, quando uma das propriedades do primeiro objecto da Array for alterada,
491
+ o Inter vai supor que apenas o primeiro elemento da lista foi atualizado, já que seu reator(objecto correspondente) foi atualizado,
492
+ então não vai procurar alterações no segundo elemento HTML da lista, já que as propriedades do segundo objecto da lista estão intáctas.
493
+
494
+ </ p >
495
+
496
+ < p > A lição é: Quando você utilizar essa opção para optimizar a lista, certifique-se que cada container(elemento da lista)
497
+ use apenas os dados dos objectos correspondentes, por exemplo, o segundo elemento da lista use apenas os dados do segundo objecto da lista.
498
+ </ p >
499
+
500
+ < p > Eu disse que no nosso exemplo, o uso da referida propriedade não faz diferença, não é?
501
+ Queres um exemplo em que ela faz a diferença(aumenta a performance)?
502
+ clica em < a href ="https://codepen.io/Denis-Power/pen/ZEPwvrJ?editors=0010 " target ="_blank "> optimização
503
+ da lista </ a >
504
+ </ p >
505
+
410
506
< h3 > < a href ="#observe " id ="observe " class ="hash "> Método observe</ a > </ h3 >
411
507
< div class ="warning ">
412
508
< p > Esse método faz parte do Inter desde a versão < span class ="hl "> 2.1.0</ span > .</ p >
@@ -700,7 +796,7 @@ <h3><a href="#listaAninhada" id="listaAninhada" class="hash">Lista aninhada</a><
700
796
701
797
return template ( {
702
798
tag : "div" , children : [ {
703
- tag : "h4" , text : `Encarregad (a): ${ nome } `
799
+ tag : "h4" , text : `Encarregado (a): ${ nome } `
704
800
} , {
705
801
tag : "p" , text : `${ nome } tem ${ filhos . length } filhos`
706
802
} , {
737
833
</ h3 >
738
834
< p > Essa propriedade funciona como a < a href ="#reactor-setProps "> setProps do reator da lista</ a > ,
739
835
mas só que, as propriedades do objecto que estamos a nos referir é que serão atualizadas, ou seja, ela(setProps)
740
- é usada para atualizar os valores das proprieades do objecto de uma maneira elegante e performática. A setProps aceita apenas um objecto
836
+ é usada para atualizar os valores das propriedades do objecto de uma maneira elegante e performática. A setProps aceita apenas um objecto
741
837
como o seu valor, e as propriedades do referido objecto devem indicar o nome das propriedades que os seus
742
838
valores serão alterados, e os valores, serão os novos valores para as respectivas propriedades.
743
839
</ p >
@@ -909,8 +1005,8 @@ <h4 _if="temTarefas">Tens { numeroDeTarefas } tarefas agendadas.</h4>
909
1005
} )
910
1006
911
1007
ref1 . observe ( ( nome , valor ) => {
912
- if ( nome == "texto" ) _if . temValorNoInput = valor . trim ( ) . length > 0 ;
913
- if ( nome == "numeroDeTarefas" ) _if . temTarefas = valor > 0 ;
1008
+ if ( nome == "texto" ) _if . temValorNoInput = valor . trim ( ) . length > 0 ;
1009
+ if ( nome == "numeroDeTarefas" ) _if . temTarefas = valor > 0 ;
914
1010
} )
915
1011
916
1012
const reatorDaLista = renderList ( {
@@ -1386,7 +1482,7 @@ <h4 _if="temTarefas">Tens { numeroDeTarefas } tarefas agendadas.</h4>
1386
1482
1387
1483
return template ( {
1388
1484
tag : "div" , children : [ {
1389
- tag : "h4" , text : `Encarregad (a): ${ nome } `
1485
+ tag : "h4" , text : `Encarregado (a): ${ nome } `
1390
1486
} , {
1391
1487
tag : "p" , text : `${ nome } tem ${ filhos . length } filhos`
1392
1488
} , {
@@ -1395,6 +1491,41 @@ <h4 _if="temTarefas">Tens { numeroDeTarefas } tarefas agendadas.</h4>
1395
1491
} )
1396
1492
}
1397
1493
} )
1494
+ const estudantes = [
1495
+ { nome : "Alberto Sampaio" , nota : 14 , professor : "João Costa" , novoProf : false } ,
1496
+ { nome : "Angelina Guilherme" , nota : 8 }
1497
+ ]
1498
+
1499
+ renderList ( {
1500
+ in : "estudantes" ,
1501
+ each : estudantes ,
1502
+ optimize : true ,
1503
+ do ( estudante ) {
1504
+
1505
+ const { nome, nota, professor, novoProf} = estudante
1506
+ const buttonEvents = { onclick : ( ) => estudante . novoProf = true } ;
1507
+ const done = { onclick : ( ) => estudante . novoProf = false } ;
1508
+ const inputAttrs = { type : "text" , value : professor , placeholder : "Digite novo professor " } ;
1509
+ const inputEvents = { oninput : ( e ) => estudante . professor = e . target . value }
1510
+ const h4Text = `Estudante: ${ nome } ${ nota > 10 ? "passou de ano" : "vai repetir" } `
1511
+
1512
+ return template ( {
1513
+ tag : "div" , children : [ {
1514
+ tag : "h4" , text : h4Text
1515
+ } , {
1516
+ tag : "p" , text : `O professor: ${ this [ 0 ] . professor } `
1517
+ } , {
1518
+ tag : "button" , text : "novo Prof" , renderIf : novoProf == false , events : buttonEvents
1519
+ } , {
1520
+ tag : "div" , renderIf : novoProf , children : [ {
1521
+ tag : "input" , attrs : inputAttrs , events : inputEvents
1522
+ } , {
1523
+ tag : "button" , text : "Feito" , events : done
1524
+ } ]
1525
+ } ]
1526
+ } )
1527
+ }
1528
+ } )
1398
1529
1399
1530
1400
1531
</ script >
0 commit comments