Sziasztok,
Most ismerkedem express+react párossal.
Amit nem értek, hogy Reactjs hogyan kezeli a multi-page alkalmazásokat?
Tudom, hogy van egy react-router-dom amivel lehet nav-bart léterhozni, de ez ilyenkor teljesen újratölti az oldalt és egy új reactapp-ot kell létrehoznom minden page-nek?
Szeretném ha header-t, nav-bar-t, footer-t nem kellene újratölteni minden egyes oldal váltásnál, illetve ha jól értem a ract sem ezzel a szemlélettel készült.
Hogyan tudok egy DOM-ba új react componeneseket, tölteni egy page váltáskor a react-router-dom-ot használva?
- 1270 megtekintés
Hozzászólások
A react pont arra keszult, hogy single page legyen, es komponenseket cserelgess rajta. Az elnavigalas mas site-ra es reloadolj barmit ami nem a current url (altalaban "/") az nem react.
Ne uj ReactApp-ban gondolkozz hanem uj Componentekben es ertsd meg a logikajat, hogy ezek hogy kapcsolodnak egymashoz es az App contexthez. Kicsit csavaros, meg a js vilag olyan, hogy mar a fel evvel ezotti tutorialok is jo esetben meg csak deprecated csomagokkal dolgoznak, de azert meg lehet talalni. Sgy par honapig biztosan lassabb leszel benne mint a megszokott php+jquery megoldasokkal dolgozva
- A hozzászóláshoz be kell jelentkezni
Igen sejtettem, hogy el kell engedni a PHP+jQuery logikát.
Lehet nem teljesen világosan fogalmaztam. Az elnavigálás alatt azt értem, hogy xyz:3000/A után megy xyz:3000/B -re.
Az jutott még eszembe, hogyha csak componenet-et cserélgetek, akkor az első betöltésnek mindig a "/" kell legyen, mert valamikor renderelni kell a header,nav-bar, footer-t. Azaz nem lehet bookmarkolni page-eket.
Esetleg tudsz valahol erre példát?
- A hozzászóláshoz be kell jelentkezni
" xyz:3000/A után megy xyz:3000/B "
A reactban a gyakorlatban nincs /A meg /B. #A meg #B van, es igy mukodik a "bookmark". At lehet irni JS-bol az URL-t amugy bizonyos JS eventek hatasara, egyebkent /A es /B -re is, de "kezzel" (gyanitom fel evente kijon ra uj plugin ami mukodik par honapig) kell atirni az URL-t, mikor a componentet lecserelted, passthrough-olnod a webservernek, hogy a /A -t is az o feladata lesz ertelmezni, ne a public/A -t keresse, (node, esetleg nginx-szel kombinalva ProxyPass-kent) es a frontendnek is elmagyarazni, hogy milyen componenteket rajzoljon, ha a beutott URL elso megnyitaskor /A volt.
- A hozzászóláshoz be kell jelentkezni
.
- A hozzászóláshoz be kell jelentkezni
> A reactban a gyakorlatban nincs /A meg /B. #A meg #B van, e
Szerintem ez egy hibas es gagyi megoldas.
A #link arra valo, hogy html-ben pl. egy "< section id=" ugorj, css-sel megsegitve, hogy smooth animaciod is legyen, amikor az oldaladon legorgetsz.
En igy hasznalom reactban (azaz normal url-ek vannak, vagy ha #, akkor az oldalon belul akarok odagorgetni).
Egyebkent a kulso reactos konyvtarak kozott nagyobb a fust mint a lang, hatalmas a hype.
Oszt' sokszor elvan az ember nelkule.
---
Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....
- A hozzászóláshoz be kell jelentkezni
xyz:3000/A után megy xyz:3000/B -re
Szerver oldalon azert kell egy url mapping, hogy ugyanazt az index.html-t szolgald ki.
Pl. expressben:
app.route('/*')
.get(function(req, res) {
res.sendFile(app.get('appPath') + '/index.html', function(err){
if (err) { /*hibakezeles*/ }
});
});
Es akkor kell meg neki egy masik cb fuggveny, hogy a static cuccokat (.css, .pdf, .png, .jpg),
kiszolgalja, es ne az index.html-t adja oda:
app.route('/:url(api|auth|components|app|bower_components|assets)/*')
.get(errors[404]);
Azt, hogy a react alkalmazasodat, hogyan strukturald, szerintem idovel gondold at, nem hiszem, hogy
erdemes egy orasi nagy bundle.js-bol kiszolgalni a weboldalt, a dokumentumkezelot, a fajlkezelot, meg ami meg eszedbejut.
El lehet szorakozni... Ha megerkeztel a webpack fertobe, akkor ott jo dagonyaszast! (2 hetig minimum) :)
---
Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....
- A hozzászóláshoz be kell jelentkezni
> akkor az első betöltésnek mindig a "/" kell legyen, mert valamikor renderelni kell a header,nav-bar, footer-t.
Nem biztos, hogy a hazifeladatot le lehet sporolni (dokumentacio olvasgatasa).
A react ugy mukodik, hogy a html oldaladban az egyik DOM node-ot kicsereli es javascriptbol ujrageneralja. Ez maga a react (vagyis a react-dom.render()).
Eleve nem is tudod a body tagra aggatni a react-ot, csak egy div-re a bodyn belul.
Szoval nyugodtan lehet az oldaladon statikus footered, az lehet a react komponensen kivul.
A navigalas meg ugy tortenik, hogy fogsz egy segedkonyvtarat, pl. a react-router (vagy irsz egyet).
Ami annyit csinal, hogy az oldaladon az osszes < a href=" tagra akaszt egy javascript event listenert, hogy a browser ne kerje le a komplett html-t ujra a szervertol (ujratoltve a bundle.js-t),
hanem o frissiti a window.location -t (igy a bongeszo url-jet), es ujrageneralja a react komponenseket, amik kellenek. Ezt altalaban kevesebb sikerrel.
Erdemes azoknak a komponenseidnek amik kulso halozati adatot igenyelnek odaadni az urlt, mint react prop-ot, hogy ujra tudja magat tolteni, vagy pedig ujrageneralja a komponenst nullarol (uncontrolled component).
De amikor ezeket megcsinaltad, akkor felmerul a kerdes, hogy minek a react-router. Mit csinal o maga? :) Van egy jo url regex match-ere....
De a hype az irgalmatlan korulotte. Meg mostmar van mobilra is. Egyebkent mobilon masik "router" a meno (react-navigation).
De ott mire osszerakod sajat magad, vert izzadsz. Ott ugye van sajat js bundlere, amit hasznal (metro), ahh, nem is folytatom.
---
Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....
- A hozzászóláshoz be kell jelentkezni
Nézd meg ezt!
- A hozzászóláshoz be kell jelentkezni
ReactJS szakembert tudnátok ajánlani Budapesten (vagy környékén vagy online)? Akár magatokat? :-) Magánórát/konzultációt szeretnék kérni.
- A hozzászóláshoz be kell jelentkezni
Szerintem (persze lehet naív vagyok :)), ha nyitsz egy topicot és konkrét dolgokat kérdezel, fog itt akadni pár ember, aki több/kevesebb tapasztalattal tud és fog is neked segíteni.
- A hozzászóláshoz be kell jelentkezni
Igazad van.
https://github.com/IFRCGo/go-frontend - itt van az a frontend ReactJS rendszer, amit a go.ifrc.org használ, és erre vonatkozóan szoktak lenni kérdéseim. Nyitok majd akkor egy új topicot ennek. (Bár a kérés továbbra is aktuális, hogy ha van az a pénz, amiért valaki dedikált időt tud erre/rám szánni, akkor ne kíméljen.)
- A hozzászóláshoz be kell jelentkezni
Talán már csak azért is jó, ha felteszel itt valahol 1-2 kérdést, hogy meghozd a kedvét az embereknek, de legalábbis lássák, hogy milyen jellegű segitségre van szükséged.
- A hozzászóláshoz be kell jelentkezni
Ha van, akinek sikerül lábra állítani a https://github.com/IFRCGo/go-frontend frontendet és a https://github.com/IFRCGo/go-api backendet (API-t), az ügyes. De lehet kísérletezni a https://dsgoproxyapp.azurewebsites.net/ tesztoldallal is.
Álljon itt az első fejtörő: a https://github.com/IFRCGo/go-frontend/blob/develop/app/assets/scripts/c… kódrészlet felelős azért, hogy az "Export Table" gombra nyomva bizonyos táblaadatok (pl. innen: https://go.ifrc.org/emergencies/all?region=1 ) letölthetőek legyenek. Az adatok az elmúlt évben egyre híztak. Ha a teljes (szűretlen) adathalmazra exportot kérünk, akkor egy idő után lehal a kérés, és a https://github.com/IFRCGo/go-frontend/blob/develop/app/assets/scripts/c… sor aktiválódik: a "Could not export data" üzenet jelenik meg. Hogy lehetne ezt kiküszöbölni (azaz növelni az exportálható adatmennyiséget)?
- A hozzászóláshoz be kell jelentkezni
blob, filereader. MDN a referencia.
Nezz meg par projektet, hogyan csinalja. Pl. jszip:
https://github.com/Stuk/jszip/blob/master/dist/jszip.js#L3459
---
Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....
- A hozzászóláshoz be kell jelentkezni
Én ezt javaslom tanulmányozásra react routerrel/routinggal kapcsolatban: https://reacttraining.com/react-router/web/guides/quick-start
State managementhez pedig érdemes megnézni a MobX-et.
- A hozzászóláshoz be kell jelentkezni
Jah es buzzword-alert!
Kb. minden heten valami ujat "fedeznek" fel (aka. feltalaljak a melegvizet), es mint minden valamire valo felfedezo, uj nevet adnak neki.
Van itt HOC, hydration, uncontrolled components, renderless, declarative component, actions, pure functions, action creators, etc, etc.
---
Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....
- A hozzászóláshoz be kell jelentkezni
A melegviz feltalálása (~ minden napra egy új megváltó lib/framework) úgy amblokk igaz a javascript/frontend világra, szerintem nem react specifikus. :)
Ugyanakkor vannak egész mature és sokak által napi szinten használt és fejlesztett dolgok, szóval "lehetne rosszabb is". A hype körülötte viszont valóban hatalmas.
- A hozzászóláshoz be kell jelentkezni
persze-persze.
En amit ajanlani tudok az a "vanilla javascript".
Azaz MDN-t kell olvasni, es ha valamit azon keresztul meg lehet oldani, akkor kar framework utan nyulni.
Az a tudas az maradando, nem pedig egy framework hasznalata, ami 2 ev alatt elavul (pl. angular v1).
---
Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....
- A hozzászóláshoz be kell jelentkezni
Igazad van és ezzel nem is lenne baj, ha a cégek nem úgy keresnének embert, hogy érts React/Angular/Vue/Node valamelyikéhez vagy esetleg mindhez, mert azt használják vagy tervezik. Egyébként meg nem akartam én a react-et védeni, csupán azt ismerem valamennyire. A "persze-persze" dolgot nem értettem mire írtad. De szerintem ne vigyük el ezt most ebbe az irányba. :)
A topicnyitó kérdését már bőven megválaszoltuk, kapott react routerhez is elég korrekt oktató linket, ennyi szerintem.
- A hozzászóláshoz be kell jelentkezni
Ezert kell a tanulast is kvazi tanitani, hogy ha adott esetben uj eszkozt kell megtanulnod, gyorsan tudj alkalmazkodni.
Tetszik nem tetszik, de a kerek ujrafeltalalasa aztan karbantartasa nem uzleti erdek a cegeknel, es ezert is celszeru ezeket a frameworkokat/libeket hasznalni.
Vanillajs oke es hasznalni ahol lehet (szvsz typescript kotelezo nagyobb projektnel), de ha mindent magad akarsz megcsinalni, akkor 1.) sehova sem haladsz, mert a mai alkalmazasok komplexitasban mar nem 1d-sak 2.) hosszutavon munkan kivul talalod magad, mert senki nem fogja lefinanszirozni.
Es ezzel szvsz semmi baj sincs, sot.. kiveve amikor az architect / ld breaking edge maniaban szenved. Anno kezdokent azert voltam ilyen projektnel :)
- A hozzászóláshoz be kell jelentkezni