Portál AbcLinuxu, 10. května 2025 08:00
<p>Number is {{ returnNumber() }}</p>V Javascriptu pak (zestručněno):
new Vue({ data: function() { return { number: 0 } }, methods: { returnNumber() { /* tělo funkce returnNumber() má dvě různé varianty zapsané níže */ } } })Dvě různé podoby těla funkce returnNumber(): 1)
return this.number = Math.random();2)
return this.number++V případě první varianty se po načtení stránky do odstavce vypíše nějaké odpovídající náhodné číslo, kdežto v případě druhé varianty se tam objeví číslo 102 a navíc se v konzoli objeví hlášení o chybě
[Vue warn]: You may have an infinite update loop in a component render function.
Takže v případě varianty 1) se funkce spustí jen jednou, kdežto v případě varianty 2) se spustí opakovaně (minimálně 102krát) a zřejmě do nekonečna, pokud by nebyla zastavena pojistkou ve Vue.
Obě varianty mají společné to, že funkce změní hodnotu vlastnosti number a její nová hodnota se pak vypíše do odstavce. Navzdory tomuto společnému se ale jinak chovají rozdílně. Ani trochu mi není jasné, proč se toto děje. Dokázal by mi to někdo nějak jednoduše vysvětlit? Děkuji.
Řešení dotazu:
jj asi se to samo dycky zkusí zaktualizovat a udělá to rekurzi :O ;D
a těch 100 je asi jako konstantou MAX_UPDATE_COUNT nastavenou na hodnotu 100 vtom *js hele řádek 4247 takže to udělá jenom těch 100 vopakování dycky :D ;D
rekurzi by to asi jako mělo dělat i pro to náhodný číslo :D ;D
lol ani ne :D :D mě zajímalo jenom proč těch 100 :D ;D
rekurzi by to asi jako mělo dělat i pro to náhodný číslo :D ;DNo, tady jsem si všiml právě rozdílu u dvou různých zápisů: 1)
this.number = Math.random(); return this.number2)
return this.number = Math.random()První zápis vyvolá nekonečnou smyčku, druhý ne. Takže, pokud to dobře chápu, v zápisu 2) se návratová hodnota metody Math.random() vloží do this.number a zároveň se vrátí jako výsledek funkce, ale hodnota this.number se při tom nečte, kdežto v zápisu 1) se na druhém řádku hodnota this.number přečte. Mám to tedy celkově chápat tak, že ve Vue nemá smysl do textové interpolace (tj. do
{{ }}
) zapisovat volání funkcí, které pracují s hodnotami v objektu data?
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.