Programim dhe zhvillim, javascript, python, php, html

Reagoni - merrni të dhëna nga komponentët funksionalë të fëmijës në prind

Kam komponentë funksionalë, prind tavoline dhe fëmijë rresht. Kontrollet e fëmijëve inicohen nga të dhënat e dhëna nga prindi. Kontrollet përdorin useState hook për të përditësuar artikujt individualë. Pra, të dhënat e tyre fillestare të vargut të rreshtave në prind, dhe gjendjet aktuale në rreshtat individualë. Tani dua të shtoj një buton Ruaj poshtë tabelës në Prind, për të vazhduar ndryshimet. Unë e kuptoj që mund t'i kaloj kthimin e telefonatave tek Fëmija, por ç'të themi për faktin që veprimi është ekzekutuar te Prindi dhe ka nevojë për të dhëna nga shumë fëmijë? Mund të ekzekutoj kursimin për rreshtat fillestarë, por dua ta ekzekutoj në grup për të gjitha rreshtat e pranishëm, kështu që duhet të bëhet në prind dhe të iniciohet nga prindi.

Prindi:

export default function RozliczeniaFaktur ({web, context, formType}: IRozliczeniaFakturProps) {
    const [dataRows, setDataRows] = React.useState(emptyRowArr);
    const [isError, setIsError] = React.useState(false);
    const [errorMessage, setErrorMessage] = React.useState(null);

[...]
    
    return (
      
      <div className={styles.rozliczeniaFaktur}>
      <Stack tokens={stackTokens}>
      {isError && <MessageBar messageBarType={MessageBarType.error} isMultiline={false} >
        {errorMessage}
      </MessageBar>} 
      <div className={styles.dataTable}>
        <div className={styles.scrollContainer}>
        <table id='rozliczenia' className={styles.table}>
          <thead>
            <tr>
[...]
            </tr>
          </thead>
          <tbody>
             {dataRows && 
                dataRows.map((dataRow, i) => {
                  return <TableRowControl web={web} key={i} Context={context} RowId={i}  FormType={formType}
                    onAddRowCallback={addRow} onDeleteRowCallback={delRow}  />
                })
              }
          </tbody>
        </table>
        </div>
        <div>

        </div>
      </div>
      </Stack>
    </div>
    );
  
}

Fëmija:

const TableRowControl = ({RowId, Context, PozFaktury, FormType, onAddRowCallback, onDeleteRowCallback, web, 
    onErrorCallback, OrganizacjaDictionary, VatDictionary, MpkDictionary, KontoDictionary, ZastepstwaDictionary,
    ZaliczkaDictionary} : ITableRowControlProps) => {   
    const [oddzialRozliczenia, setOddzialRozliczenia] = React.useState<number | string>(PozFaktury.OddzialRozliczenia);
    const [dataSprzedazy, setDataSprzedazy] = React.useState<Date>(PozFaktury.DataSprzedazy);
    const [dataOtrzymania, setDataOtrzymania] = React.useState<Date>(PozFaktury.DataOtrzymania);
    const [vat, setVat] = React.useState<string | number>(PozFaktury.StawkaVAT);
    const [nip, setNip] = React.useState<string>(PozFaktury.NIPDostawcy);
    const [waluta, setWaluta] = React.useState<string | number>(PozFaktury.Waluta);
    const [nrDok, setNrDok] = React.useState<string>(PozFaktury.NRDokumentu);
    const [kwota, setKwota] = React.useState<string>(PozFaktury.KwotaBrutto.toString())
    const [mpk, setMpk] = React.useState<string | number>(PozFaktury.MPK);
    const [konto, setKonto] = React.useState<string | number>(PozFaktury.KontoGL);
    const [magazyn, setMagazyn] = React.useState(PozFaktury.Magazyn);
    const [nrPz, setNrPz] = React.useState(PozFaktury.NrPZ);
    const [opis, setOpis] = React.useState(PozFaktury.Opis);
    const [zaliczka, setZaliczka] = React.useState<string | number>(PozFaktury.Zaliczka);
    const [aprobata1status, setAprobata1status] = React.useState(PozFaktury.Aprobata1Status);
    const [aprobata2status, setAprobata2status] = React.useState(PozFaktury.Aprobata2Status);
    const [komentarz, setKomentarz]



    return(
        <tr>
[...]
        </tr>
        );
}

export default TableRowControl;

  • Nëse nuk gabohemi, butoni ruaj duhet të ruajë vlerat nga secili prej komponentëve (rreshtave) fëmijë. Por, komponentët fëmijë përmbajnë gjendje, apo jo? Nëse po, a nuk mund të hiqet gjendja te prindi (ku ekziston butoni ruaj)? 14.03.2021
  • @NathanHall po, në përgjithësi mund ta ngrija me kthime të thirrjeve, por si ta inicoj nga prindi, ku është butoni? 14.03.2021
  • nuk mund të hyni në gjendje nga një fëmijë duke përdorur ngjarjen e klikimit të butonit. Ka rregull në reagim, "produktet poshtë dhe ngjarjet lart". Shikoni këtë jasonformat.com/props-down-events-up 14.03.2021
  • @NathanHall ok, kështu që ndoshta më duhet ta ridizajnoj, të ndryshoj qasjen - por për çfarë? Do të më duhej të përdorja useState jo me konstancë lokale në fëmijë, por me ndonjë objekt në prind (për të ruajtur gjendjen aktuale të të gjitha rreshtave në prind dhe për të qenë në gjendje ta aksesoj atë kur shtypni "dorëzo"). A është edhe e mundur kjo? 14.03.2021
  • absolutisht e mundur. Dhe, është shumë më e lehtë kur përdorni bibliotekë të tillë si Formik. 14.03.2021
  • Një mënyrë për të menaxhuar është duke caktuar një emër për çdo hyrje. Më pas, mbajtësi i ndryshimit mund të tërheqë emrin dhe vlerën nga ngjarja. Shikoni këtë si shembull. github.com/jaredpalmer/formik-alicante/blob/ master/src/shembuj/ 14.03.2021
  • Mund ta zhvendosësh gjendjen te prindi (kini kujdes që të mos i riformoni të gjitha rreshtat kur ndryshon vetëm një) ose të përdorni një dyqan (p.sh. Redux). Nëse vërtet dëshironi të aksesoni gjendjen e komponentëve të fëmijës nga prindi, mund të provoni diçka të tillë (por Redux duket një ide më e mirë në rastin tuaj) stackoverflow.com/questions/66445560/ 14.03.2021

Përgjigjet:


1

Provoni të përdorni grepin useImperativeHandle, mund t'ju ndihmojë, ka të bëjë me metodat e kalimit dhe dërgoni gjëra nga fëmija juaj te prindi juaj që prindi juaj t'i përdorë ato.

13.03.2021
  • Nuk mendoj se kjo do t'i jepte prindit qasje në gjendjen e fëmijës përmes ngjarjes së klikimit të butonit. Ndoshta mund të jepni një kod shembull? Butoni jeton në prind, dhe gjendja jeton tek fëmija (nga kuptimi im i pyetjes) 14.03.2021
  • Materiale të reja

    Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
    Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

    Faketojeni derisa ta arrini me të dhënat false
    A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

    Si të përdorni kërkesën API në Python
    Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

    Një udhëzues hap pas hapi për të zotëruar React
    Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

    AI dhe Psikologjia — Pjesa 2
    Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

    Esencialet e punës ditore të kodit tim VS
    Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

    Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
    Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..