Hirdetés
- AMD Navi Radeon™ RX 9xxx sorozat
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Amlogic S905, S912 processzoros készülékek
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Xiaomi Mi Box androidos médialejátszó 4K és HDR támogatással
- Fontos marad a nyílt forráskód az Intelnek, csak nem a megszokott formában
- Milyen házat vegyek?
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- OLED TV topic
- Milyen széket vegyek?
-
PROHARDVER!
JavaScript != Java (A JavaScript nem összekeverendő a Javával, két különböző programozási nyelvről van szó!)
Új hozzászólás Aktív témák
-
Ukeve
tag
Sziasztok!
Egy kis segítséget szeretnék kérni.
Egy React alapú webalkalmazást fejlesztek, ahol adott ez a komponens:const MainLesson = () => {
const navigate = useNavigate();
const [ openID, setOpenID ] = useState();
const initialState = '0';
const [ childOpenID, setChildOpenID ] = useState(initialState);
useEffect(() => {
console.log('Beállítjuk a localstorage-nek az id-t');
localStorage.setItem('id', JSON.parse(childOpenID));
console.log('Beállítottuk a localstorage-nek az id-t');
});
return (
<div>
{LessonsData.map((lessonItem) =>
<div key={lessonItem.id} onClick={() => setOpenID(lessonItem.id)}>
{lessonItem.id !== openID
? <LessonCard taskItem={lessonItem} />
: lessonItem.id === openID && lessonItem.subsection > 0 ?
lessonItem.child.map((lessonChildItem) =>
<div key={lessonChildItem.id}
onClick={() => {
setChildOpenID(lessonChildItem.id);
}}
>
<LessonCard taskItem={lessonChildItem} />
{childOpenID !== '0' &&
navigate(`/lesson/${childOpenID}`)}
</div>)
: <LessonCard taskItem={lessonItem} />}
</div>)}
</div>
);
};
A komponens lényege röviden az, hogy ha egy adott LessonCard-ra rákattintok, akkor a localstorage-ben eltárolja annak az id-ját és ha az egy gyerekelem, akkor át is navigál a megfelelő oldalra.
Az App-ben pedig dinamikusan kezelem azt, hogy az id-nak megfelelő oldal nyíljon meg:function App() {
const authenticationContext = useContext(AuthenticationContext);
const getLessonID = () => {
console.log('Átadjuk az app-ben az id-t');
const id = JSON.parse(localStorage.getItem('id'));
console.log('id az app-ban:', id);
return id;
};
const lessonID = getLessonID();
console.log('lessonID:', lessonID);
return (
<Layout>
<Routes>
<Route path='/' element={<HomePage />} />
{!authenticationContext.isLoggedIn &&
<Route path='/authentication'
element={<AuthenticationPage />}
/>}
<Route path='/authors' element={<AuthorsPage />} />
<Route path='/contact' element={<ContactPage />} />
<Route path='/topics' element={<TopicsPage />} />
{authenticationContext.isLoggedIn &&
<Route path='/lessons' element={<LessonsPage />} />}
{authenticationContext.isLoggedIn &&
<Route path='/profile' element={<UserProfile />} />}
{authenticationContext.isLoggedIn &&
<Route path='/lesson/:id'
element={lessons.content.body.map(
block => block.id === lessonID &&
Components(block))}/>}
<Route path='*' element={<NotFound />} />
</Routes>
</Layout>
);
}
A probléma az, hogy ha rákattintok egy adott leckére, akkor szépen átnavigál a megfelelő oldalra és be is teszi a localstorage-be az id-t, viszont mivel az App nem renderelődik le újra, így a képernyőn mindig az előző lecke oldala nyílik meg. Ezt úgy kell érteni, hogy rákattintok először a 21-es id-jú leckére, majd visszamegyek és meg akarom nyitni a 22-es id-jú leckét, akkor az url jó lesz, tehát "localhost:3000/lesson/22" lesz, de a 21-es oldalát látom. Ha ráfrissítek az oldalra, akkor marad a jó url, viszont már a 22-es leckét fogom látni.
Az lenne a kérdésem, hogy szerintetek hogyan lehetne megoldani azt, hogy azelőtt kapja meg az App localstorage-ból az id-t, mielőtt még elkezdené lerendelni az adott komponens, így elérve, hogy jó oldal legyen megjelenítve?Előre is köszönöm a segítséget!
Új hozzászólás Aktív témák
- PlayStation 5
- AMD Navi Radeon™ RX 9xxx sorozat
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- NFL és amerikai futball topik - Spoiler veszély!
- Apple Watch
- Mikrotik routerek
- Windows 10
- Luck Dragon: Asszociációs játék. :)
- Amlogic S905, S912 processzoros készülékek
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- További aktív témák...
- Honor Magic V2 5G 512GB / 16GB fekete
- Dell Precision M4700 laptop (i7, 16gb, 256 SSD, Quadro K2000M)
- Unifi UACC-CM-RJ45-MG SFP+ RJ45 10G adapter eladó, majd 2 év garanciával
- ASUS TUF F15 extra hardverekkel - i5 11400H, RTX 3050Ti, FHD 144Hz, 1,5TB SSD, 16GB RAM
- HTC Vive Pro 2 teljes prémium VR szett Valve INDEXEL, garanciális, sok extrával!
- ÁRGARANCIA!Épített KomPhone i5 14600KF 16/32/64GB RAM RTX 5070 12GB GAMER PC termékbeszámítással
- BESZÁMÍTÁS! Microsoft XBOX Series X 1TB SSD fekete játékkonzol garanciával hibátlan működéssel
- HIBÁTLAN iPhone 13 128GB Red -1 ÉV GARANCIA - Kártyafüggetlen, MS3760, 93% Akkumulátor
- HIBÁTLAN iPhone 13 Pro Max 256GB Graphite -1 ÉV GARANCIA - Kártyafüggetlen, MS3756, 91% Akkumulátor
- BESZÁMÍTÁS! ASROCK B650M R5 7600X 32GB DDR5 1TB SSD RX 7900 XT 20GB Zalman Z1 PLUS A-Data 750W
Állásajánlatok
Cég: NetGo.hu Kft.
Város: Gödöllő
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest