Wuu Posted May 28, 2015 Author Report Posted May 28, 2015 (edited) Skaidrs, paldies! Edited May 28, 2015 by Wuu Quote
Wuu Posted May 29, 2015 Author Report Posted May 29, 2015 (edited) case 'switch': var nt = this.state.t; nt[r][key] = (val == 1 ? 0: 1); this.setState({t: nt}); break; Reāli tracina ka setState nevar viena arraja vērtībai, vai arī es kaut ko nepareizi sapratu. Ja vēlos arrajā nomainīt vienu vērtību, tad sanāk ka tas jāsaglabā citā arrayā. Jānomaina vērtība, un tad pa virsu jāsaglabā? Tā vien liekas, ka šādiem variantiem jāuztaisa funkcija. Edited May 29, 2015 by Wuu Quote
Kasspars Posted May 29, 2015 Report Posted May 29, 2015 this.state.t[r][key] = newValue; this.setState(this.state); Varbūt kāds var pakomentēt cik slikti/labi ir šāda konstrukcija Quote
codez Posted May 29, 2015 Report Posted May 29, 2015 Wuu, tam var izmantot React update addonu. Piemērs: http://jsfiddle.net/d9crpzqy/11/ Bet tavā gadījumā var nt = this.state.t; nesaglabā citā masīvā, nt ir tas pats state.t masīvs un būtībā notiek tas pats, kas Kasspars piemērā. Kas attiecas uz Kasspara piemēru, domāju, ka lielākajā daļā gadījumu nekam sliktam nevajadzētu notikt, taču nebūtu grūti atrasts speciālu gadījumu, kur tas var strādāt ne tā kā domāts. Pareizākais būtu lietot vai nu update addonu, vai Immutable datu struktūras, piemēram, Immutable.js Quote
Kasspars Posted May 29, 2015 Report Posted May 29, 2015 Domāju, problēma varētu būt liela state gadījumā ar daudz properties, tad React ir spiests salīdzināt visas state properties. Ja uz setState padod tikai vajadzīgo property, tad to vienu arī salīdzinās. Quote
codez Posted May 29, 2015 Report Posted May 29, 2015 Pie PureRenderMixin-a izmantošanas react salīdzina visas props un state vērtības: https://github.com/facebook/react/blob/5d3b12bb3bd6a092cf00ede07b8255a8399c2e58/src/addons/ReactComponentWithPureRenderMixin.js#L41-43 https://github.com/facebook/react/blob/5d3b12bb3bd6a092cf00ede07b8255a8399c2e58/src/utils/shallowEqual.js#L21-40 Problēma varētu rasties asinhronos procesos, kad tu izmaini daļu no state un tad izsauc kaut ko asinhronu, kurš balstās uz state, utml. Bet kā jau teicu vienkāršos gadījumus problēmām nevajadzētu būt. P.S. Šeit masīva elementa nomaiņas piemērs ar Immutable.js: http://jsfiddle.net/d9crpzqy/12/ Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.