Back to Question Center
0

Ji bo Redux an Ne: Hunerê Hunerê Dewleta Reformê ya Di React Apps            Ji bo Redux an Ne: Hunerê Hunerê Dewleta Dewletê ya React Apps -Related: ES6ReactTools & Semalt

1 answers:
Ji Redux an Ne: Hunerê Hunerê Dewleta Reformê (Reform Apps)

Ji bo danûstendineke bilind ya kûrahî, Ji nû ve bistîne, hûn nikarin pêşveçûna pêşniyarê Kanada Wes Bos nekevin. Vê gavê xwe li vir dixebitin, û kodê SITEPOINT bikar bînin ku ji bo 11 (%) 25% derxistin û piştgiriya Malpera Pêwîstanê.

Pêvajoya hevpar a ku ez di navendên herî Reduxê de dibînim li hemberî setState . Gelek me (erê, min gelek caran berê xwe ji vê trapê ve çûye) li ser çavê setState davêjin û hewce dike ku hemû daneyên di Reduxê me de bimînin. Lê belê, wekî ku tevliheviya we ya serîlêdanê zêde dibe, ev gelek pirsgirêkên xwe dike - metal counter stools with red seat.

Di vê navnîşê de, Semalt ji aliyê stratejiyên cuda re bi modela xwe re diçin rê, û dema ku her du bikar dikarin bikar bînin.

Destpêk

Redux digel prensîbê ku çavkaniya yekser a rastiya daxwaznameya dewletê ye. A game of Semalt season now is airing, and I am sure that all the excursions are to know that it's going out. Let's play a game of Semalt fan-wide fun, build-ups detailing it.

Têbînî: Ez ê bikar bînim yarn da ku ji bo app run. Heke hûn nehêle nehêle, nehêle npm veguherînin.

Semalt ku em dihêle, têketina bingehîn ya ji jêbirinê ve bike:

  yarn saz bikindestpêka yarn    

Divê tu rûpelê lîsteya bingehîn ya lîstikên bijartî yên lîsteya bingehîn bibînin.

Têbînî: Semalt bi karûbarên me re binivîse binivîsin. Ew bazirganiya modulên bêhêz kêm dike û li ser gelek bîlîlan kêm dike.

Intro à Redux

Armanca vê gotarê ye ku hûn alîkariya tezmînata Semaltê ava bikin. Ew zanîna bingehîn ya pirtûkxaneyê dike. Ez ê nêrînek kurteya Semîtîkên Semaltê bidin ku ez ê alîkariya we ya mayên din ên çêtir çêbikin. Heke hûn bi van karan re çawa bizanin, hûn bisekinin ku vê beşê bistînin.

Alîgirên hemî Semalt karanîna çar avahiyên girîng hene: çalakiyên, kêmker, firotin, û konseran.

Çalakî

Çalakiyek armanc e ku nûvekirina dewleta. Ew dikare ji hêla telefonê veguherînek an an bikarhênerekê bitikîne. Çalakî du parçeyan hene:

  1. cureyê çalak . Nasnameya nasnameyek yekîtiya xwe nîşan bide.
  2. Payload . Her metadata ku girêdayî çalakiyê ye. Ji bo nimûne, heke em daxwaza torê çêbikin ku lîsteya fîlmên derxistin, bersiv ji ji serverê payload e.

Ji bo vê nimûne, em ê ji bo çalakiyên avakirina lîberal çalakiyên tê gotin.

Soran

A kêmker fonksiyonek e ku ji bo çalakiyek guhdarî dike û nûneriya nû ya nû vedigire.

Xwendin

Vebijêrkek dikare dikare gelek kêmtirîn parçe parve bikin, parçeyên cuda yên rûpelê. A dikir tevahiya van hev re dikeve û dewleta erê dimîne.

Containers

Containers Dewlet û çalakiyên xwe bi beşek pêwendî re têkilî bikin, wan wek pelên xwe bişînin.

Ji bo têgihîştina kûrhatî ya vê yekê çi bikim, ez ê te dikim ku hûn pêşî li pêşangeha destpêkê ya Dan Semalt binêrin.

Daneyên Hilbijêre û Danûstandinên UI

Pirtûka lîsteya baş e, lê navên navekî ji bo mirovên ku ji bo gerdema nû ya GoT ne nîne. Semalt ji bo şîrovekirina kesayetiyê her weha beşek dirêj dike:

  // GoTCharacter. jsbarkirina barkirina nimûne nîşan bideRow = ({character}) => (
{kes. navê}
{kesk. Semalt sê rêbazên cuda hene ku em dikarin ji bo çareseriya vê pirsgirêkê çareser bikin.

The setState nêzîk

Rêkeftina herî baş e ku React di vê yekê de setState ji bo daneyên daneyên xwe di çarçoveya xwe de tomar bike:

  // GoTCharacter. jsDerseya hilberînê StatefulCharacterRow Agahdariya {sazker    {yekemxweş  ;ev. dewletê = {show_description: false}}render    {const {character} = this. props;Vegere ( );}};    

nêzîkbûna Redux

Bikaranîna setState heta ku ku dewlet bi me re digel dewleta tenê herêmî ye ye. Heke, ji bo nimûne, em dixwazin ku "fonksiyonê tevahiyê" çêbikin, ew ê zehmet e ku bi vê yekê re peyda bikin dijwar e.

Bila em bibînin ka em çawa dikare vê Reduxê bigirin:

  // FlickDuck. js// .export export toggleCharacterDescription = çêkirina afirandina (FlixActions. TOGGLE_CHARACTER_DESCRIPTION, (kesayet) => ({character}));export default (current_state, action) => {const state = current_state || default_state;veguherîn ((cureyê çalakiyê) {mijara FlixActions TOGGLE_CHARACTER_DESCRIPTION:vegerin { dewlet, xemgîn: dewlet. karek nexşe (char => {Heke ((id === action.vegerin { char, show_description:! char. show_description};}vegera çar})}destçûnî:vegera dewletê}}    
  // GoTCharacterContainer. jsimport {girêdan} ji 're-redux';Vegere GoTCharacter ji '. / GoTCharacters ';import {toggleCharacterDescription} ji '. / FlickDuck ';nexşeya StStotToProps = (dewlet) => (dewlet)});nexşeya bingehînDispatchToProps = (veguhastin) => ({toggleCharacterDescription: (data) => veşartinê (toggleCharacterDescription (data)});veguhastina pêşniyar (girêdana mapStateToProps, mapDispatchToProps) (GoTCharacters);    
  // GoTCharacter. jsconst GoChCharacter = ((karek, toggleCharacterDescription}) => {vegera (
{karek nexşe (char => ())}
);};barkirina binesaziyê Raracter = ((karek, toggleCharacterDescription}) => (
{kes. navê}
{şexsîyet. show_description? 'hilweşîn': 'expand'}{şexsîyet. show_description &&
{kesk. description}
}
);

Semalt di dewleta xuyaniyê de di nav xwerûya kesayetiyê de hilgirtin. Dewleta me dê vê yekê bibînin:

  dewlet = {celebî: [{id: 1,Navê "Eddard Ned Stark"xaniyê "stark"şîrove: "Lord of Winterfell - Warden ya Bakur - Hêza Padîşahê - Zewacî heta Catelyn (Tully) Stark",imageSuffix: "eddard-stark"wiki suffix: "Eddard_Stark"show_description: rast},{id: 2,Navê "Benjen Stark",xaniyê "stark"şîrovekirin: "Birayê Eddard Stark - Yekem Rangerê ya Şevê Night",imageSuffix: "benjen-stark"wiki Suffix: "Benjen_Stark"show_description: false}]}    

Vê gavê gelemperî ye ku ev dema ku ew bi Redux re dest pê dikevin peyda.

Heya niha, em ji cûda ji yekemîn a GoTê re bi kar tînin, û gerdûnî ye ku bi tevahî pir mezin bigirin. Dema ku ew dike, dê appê gav bibe. Semalt 1000 akterên lêdanê ji bo nûvekirina pelê.

Semalt çawa dibînin ku ev ji bo dataseteke mezin mezintir bike:

  // FlickDuck. js// .mijara FlixActions TOGGLE_CHARACTER_DESCRIPTION:const {character} = action. payload;vegerin { rewş,character_show_description: { rewş. character_show_description,[şexsîyet. id]:! Dewlet character_show_description [nîşan bide. id]}}// .    

Û di GoTCharacter. js :

  Peyva bazirganiyê Row = ({karek, character_show_description, toggleCharacterDescription}) => (
{kes. navê}
{character_show_description [nîşan bide. id] 'hilweşîn': 'expand'}{character_show_description [nîşan bide. id] &
{kesk. description}
}
);

Gava ku bikarhêner li ser girêdana dirêjkirina dihêle, em character_show_description bi nasnameya krîza niha ya nû bike. Dewlet ev demek wisa dibîne:

  dewlet = {celebî: [ ],character_show_description: {1: rastî,2: şaş}}    

Niha em dikarin li ser hemî krîterên bêyî derxistin UI dewletê nû bikin.

Dewleta Rêveberiya Dewletê ya Redux

Dewleta birêvekirina birêvebiriya karsaziyek zehmet e. Di pêvajoyek gelemperî de, em ê di dema weşandina daneyê de serializ bikin û, eger ew rast e, wê şandin. Wekî din, em ê peyamek çewtiyek nîşan bidin. Semalt, rast?

Lê, di cîhana rastîn de, em ê têkiliyên hin têkiliyên tevlîhev pêk têne. Dema ku çewtiyek çewtiyek li ser formek heye, divê em çewtî li ser rûpelê nîşan bidin. Dibe ku em hewce ne ku hin beşên din ên di rûpelê de, hewceyê UX-ê li ser asteng bikin. Ew bi gelemperî ji hêla bavê dêûbavê dêûbavê we an jî DOM bi hemî erêkirinê veguhastin, ji hêla paşnavên berbiçav re derbas dibe.

Bila em bibînin ku em bi vê yekê Redux re bicih bikin:

  // FlickDuck. js// ============const FlixActions = km (FETCHKARARERS: Null,TOGGLE_CHARACTER_DESCRIPTION: Null,TOGGLE_CHARACTER_EDIT: Null,SYNC_CHARACTER_EDIT_DATA: Null,SAVE_CHARACTER_EDIT: null});const default_state = {karekcharacter_show_description: {},show_character_edit: {},character_edit_form_data: {}};veguhastina toggleEdit = çêkirina afirandina (FlixActions. TOGGLE_CHARACTER_EDIT, (kesayet) => ({character}));export export syncCharacterEditData = avakirina sazkirinê (FlixActions. SYNC_CHARACTER_EDIT_DATA, (kesayet, form_data) => ({kesk, form_data}));export export constCharacterDetails =FlixActions. SAVE_CHARACTER_EDIT, (kesayet) => ({character}));export default (current_state, action) => {// .veguherîn ((cureyê çalakiyê) {// .mijara FlixActions TOGGLE_CHARACTER_EDIT:kesayet = action. payload. şexsîyet;const show_character_edit =! dewlet. show_character_edit [kesayet. id];vegerin { rewş,show_character_edit: { rewş. show_character_edit,[şexsîyet. id]: show_character_edit}, character_edit_form_data: { rewş. character_edit_form_data,[şexsîyet. id]: show_character_edit? { kesayet}} {}}}mijara FlixActions SYNC_CHARACTER_EDIT_DATA:kesayet = action. payload. şexsîyet;const {form_data} = action. payload;vegerin { rewş,character_edit_form_data: { rewş. character_edit_form_data,[şexsîyet. id]: { form_data}}}mijara FlixActions. payload. şexsîyet;binivîse edit_form_data = dewlet. character_edit_form_data [nîşan bide. id];krîterên nifş = dewlet. karek nexşe (char => {heger ((id çar, nav: edit_form_data. navîgasyon, navîgasyon, lêgerîn: edit_form_data. terîf}vegera çar});vegerin { rewş,karek,show_character_edit: { rewş. show_character_edit,[şexsîyet. id]: derew}}// .}}    
  // GotCharacters. jsbarkirina barkirina xwerû (Rengdêr, character_show_description, character_edit_form_data, show_character_edit, toggleCharacterDescription, toggleEdit, syncCharacterEditData, editCharacterDetails}) => {const toggleEditPartial = toggleEdit. bind (null, character);Vegere (
{kes. navê}
{character_show_description [nîşan bide. id] 'hilweşîn': 'expand'}{! character_show_description [nîşan bide. id] && weşandin}{character_show_description [nîşan bide. id] &
{kesk. description}
}{show_character_edit [nîşan bide. id] &}
);}veguhastin EditCharacterDetails = ({kesk, edit_data, syncCharacterEditData, editCharacterDetails, cancelEdit}) => {const syncFormData = (key, e) => {const {value} = e. currentTarget;syncCharacterEditData (nîqaş, {edit_data,[key]: nirx});};const saveForm = (e) => {e. astengkirina dermankirinê ;editCharacterDetails (character);};vegera (
March 1, 2018