expressjs+reactjs

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?

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

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?

" 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 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....

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....

> 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....

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.

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.)

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)?

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....

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 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.

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....

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.

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 :)