Jump to content
php.lv forumi

Angularjs vai Backbonejs vai ko citu?


Wuu

Recommended Posts

Ja tu uzdod šādu jautājumu, tad tu esi nepareizi sapratis react.

 

Tev nav jādomā par citas komponentes setState. Ja parent komponentē izmainās dati (setState), tad uzreiz tiek izsaukta render metode, kura visām child komponentēm iedod jaunus props.

Link to comment
Share on other sites

  • Replies 51
  • Created
  • Last Reply

Top Posters In This Topic

Ko domājat par React testēšanu?

Kas attiecas uz unittestiem, man patīk jest ideja automātiski mockot visu, kas nāk no require() funkcijas, bet tajā pašā laikā jest ir ļoooti lēns.

Turklāt ņemot vērā, ka tādā viduvējā projektā varētu būt ap 100 komponentiem, tad nemaz tā negribas tos unittestus visiem komponentiem rakstīt..

 

Iespējams vieglāk pāriet visam pāri augstākā līmenī ar selenium. Nav tik plašs coverage, bet domāju ka izķer 80% bugu.

Link to comment
Share on other sites

Nē, nesapratu. Konceptuāli saprotu visu, viss tikai vienā virzienā. bet...

 

Man ir sākuma arrays (Ajax), ar kuru es veidoju saturu. Būti, pieeja viņam ir tikai pirmajai klasei. Ajax saturs saglabājas state. Bet divas klases zemāk, es ar pogu gribu izmainīt arrayā mainīgo un atjaunot nerenderēt visu pa jaunu. Kā man to izdarīt? Atkal atgriežoties pie jautājamu, kā man no vienas klases izmainīt state citai klasei?

Edited by Wuu
Link to comment
Share on other sites

React ideja tieši ir visu pārrenderēt. Tāpēc jau arī ir izveidots virtuālais DOM, kurš tiek pārrenderēts un reālajā DOM tiek ieliktas tikai reālās izmaiņas.

 

Reālais DOM tiks izmainīts, tikai tad, kad tiešām ir bijušas izmaiņas. Tāpēc nevajag baidīties no pārrenderēšanas.

Link to comment
Share on other sites

Kasspars, zinu to vissu. Esmu izstudējis pāris video, tutoriāļus.

 

Bet konceptuāli nespēju uzbūvēt galvā ideju.

Main class
/         \
menu      saturs

Pēc manām domām loģiska uzbūve, vienā pusē klase ar izvēlni. Otrā saturs.

 

Kā man piespiežot pogu menu, izmainīt state saturā?

 

Šobrīd mans risinājums bija pārvietot menu uz Main class. Bet tad zūd normāla struktūra. Tik pat labi, var uzbliezt vienu lielu klasi un aizmirst.

Link to comment
Share on other sites

Main klasē padod "menu click callback" uz Menu komponentei (caur props)

 

tad, kad Menu komponentē notiek kliks, tu izsauksi padoto "menu click callback". Līdzi padod menu identifikatoru

 

Tālāk Main klase savā state uzstādīts activeMenuId (uzstādot state notiks rerender)

 

activeMenuId tiek caur props padots Satura komponentei

 

Tad, kad notiks rerender Satura komponente ielādēs saturu vadoties pēc padotā activeMenuId



var Main = React.createClass({

	getInitialState: function() {
		return {
			activMenuId: 1
		}
	},

	handleMenuClick: function(menuId) {
		this.setState({activMenuId: menuId})
	},

	render: function() {
		return (
			<Menu onMenuClick={this.handleMenuClick} />
			<Saturs menuId={this.state.activMenuId}
		);
	}

});

Edited by Kasspars
Link to comment
Share on other sites

Es pieturos pie principa, ka uzreiz ir jāraksta kvalitatīvs kods, nevis uzrakstīt pāris vai vēl trakāk ļoti, ļoti daudz testus un tad mainīt kodu, līdz viņš iziet visus testus.

Tā kā nerakstu React komponenšu bibliotēkas un manas komponentes lielākoties ir specifiskas attiecībā pret projektu, tad vairāk visu testēšanu balstu uz funkcionāliem testiem - Scalatest ar Selenium.

Taču, ja ir vajadzība pēc tīras React komponenšu testēšanas, tad izmantoju Mocha un React testa addonu, aptuveni šādi:

http://jsfiddle.net/d9crpzqy/9/

 

Saprotams, ka manā gadījumā (Scala, sbt) es priekš testu laišanas izmantoju sbt un attiecīgos pluginus.

Edited by codez
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...