Augustus 2020 - 2021

Sebastiaan Henauseptember 17, 2022Ongeveer 5 minuten

Augustus 2020 - 2021

Waarschuwing

Let op, in dit examen is geen sprake van hooks, context, of recoil. Toch moet je zaken kennen voor het examen van >= 2020 - 2021. Probeer de oefeningen op verschillende manieren op te lossen, een keer met hooks, met recoil en met class components, zo ben je goed voorbereid op je examen.

Ondanks de verschillen in leerstof geeft dit voorbeeldexamen wel een goed idee van de omvang en complexiteit van toekomstige examens.

De oplossingen en startbestanden zijn niet geüpdatet voor nieuwe React versies en kunnen dus out-of-date of deprecated features bevatten. Deze worden as-is aangeboden, ouderwetste of niet langer werkende code zal niet aangepast worden.

Project aanmaken

Maak een nieuw React project aan, zorg er voor dat alle standaardbestanden in de src map verwijderd worden en je vanaf nul begint. Download vervolgens de startbestanden en plaats deze in je nieuwe project.

Voer onderstaande commando uit om de bibliotheken die in de startbestanden gebruikt worden te installeren.

npm install --save lorem-ipsum uuid

In de startbestanden kan je een CSS bestand vinden, zorg dat dit voor je volledige project gebruikt wordt.

Daarnaast zijn er in de startbestanden ook 2 API klassen te vinden, deze pas je niet aan. Deze API-klassen bevatten documentatie over de verschillende methodes, lees deze goed door voor je een methode probeert te gebruiken. Let op, sommige methodes zijn asynchroon andere niet. Tenslotte zijn in de startbestanden ook enkele componenten te vinden die je zult moeten gebruiken of uitbreiden in de laatste opgave.

Het examen bestaat uit het opbouwen van een blog. De eigenaar zal blog posts kunnen plaatsen en bezoekers kunnen deze bekijken en hier commentaar op plaatsen.

Hou volgende punten in acht tijdens het maken van je examen:

Componenten

Voor dit examen heb je minstens volgende componenten nodig:

Home Pagina

De HomePage component bestaat uit een div die ofwel de klasse dark of de klasse light krijgt. De lezer van de blog kan via een checkbox in de NavBar component (zie verder) het thema van de website aanpassen van light naar dark en omgekeerd. Binnen deze div wordt eerst de NavBar component geplaatst, verder bevat de HomePage ook een andere div die de klasse container krijgt.

Figuur 1: Structuur van de examenopdracht

Bouw bovenstaande structuur uit. Binnen de container div moet routing toegevoegd worden, hieronder zie je de paden die aanwezig moeten zijn.

De functie component NavBar bestaat uit een aantal links, een checkbox en de LoginForm component. De verschillende items in de NavBar worden in een unordered list geplaatst (<ul>). De opmaak wordt door de bijgevoegde CSS in orde gebracht. Als jouw code niet 100% dezelfde layout produceert, is dit geen probleem.

Figuur 2: Navbar met het dark thema

De NavBar component is een functie component en heeft dus geen state, dit betekent dat de gebruikersinformatie, de themakeuze en de nodige handlers vanaf de bovenliggende component doorgegeven worden. Zorg dat hierop de nodige controles gebeuren via de prop-types bibliotheek.

Figuur 3: Navbar met het light thema

LoginForm

De functie component LoginForm bestaat uit een textinput waar de gebruikersnaam ingegeven kan worden, de component bevat bovendien een checkbox die (bij gebrek aan een authenticatieserver) aangeeft of de gebruiker al dan niet de eigenaar is van deze blog. Merk op dat de gebruikersnaam geen belang heeft, elke gebruikersnaam wordt goedgekeurd, zolang deze minstens 1 karakter lang is.

Hou er rekening mee dat het al dan niet ingelogd zijn van de gebruiker invloed zal hebben op de rest van de website en dat deze wijzigingen onmiddellijk zichtbaar moeten zijn zonder de website te herladen.

Figuur 4: LoginForm component

BlogList

Deze component kan zowel gebruikt worden om de reeds bestaande blogposts te bekijken als om een nieuwe post aan te maken. Het is natuurlijk vanzelfsprekend dat een nieuwe post enkel aangemaakt kan worden door de eigenaar van de blog (zie LoginForm). De eigenaar ziet een knop "New blog post" als hij het pad "/blogs" bekijkt. De createNewBlog methode uit de BlogsAPI klasse genereert een blogpost bestaande uit lorem-ipsum tekst.

Figuur 5: New blog post knop in de BlogList component

De BlogList component toont een overzicht van de verschillende blogposts die de eigenaar van de website geplaatst heeft. De verschillende posts zijn zichtbaar voor elke gebruiker (ingelogd of niet). Voor elke post worden de titel en de eerste alinea getoond (zie de commentaar in de BlogsAPI klasse voor concrete info over de structuur van de BlogPost objecten). Tenslotte bevat een blogpost ook een link naar de detailpagina waar de volledige post gelezen kan worden. Wat betreft de opmaak wordt een post omringd in een div met de CSS-klasse blog-card. Een array van alle blogposts kan opgehaald worden via de getBlogs methode in de BlogsAPI klasse.

Figuur 6: Overzicht van de bestaande blogs in de BlogList component

Tenslotte heeft de eigenaar van de blog ook de mogelijkheid om een blog te verwijderen, gebruik hiervoor de deleteBlog methode uit de BlogsAPI klasse.

Figuur 7: Delete blog functionaliteit in de BlogList component

BlogDetail

De BlogDetail pagina toont de volledige inhoud van de blogpost, inclusief commentaren. Voor deze component vertrek je van het meegeleverde startbestand.

In het geval dat de post nog geen commentaar heeft wordt de tekst "No comments yet" getoond. Om de commentaren te tonen kan je gebruik maken van de Comment component die je in de startbestanden vindt.

Onder de commentaren wordt een formulier getoond waarmee elke ingelogde gebruiker een commentaar kan plaatsen, na een druk op de post knop is deze commentaar onmiddellijk zichtbaar op de pagina.

De startbestanden bevatten een component NewCommentSection, deze definieert het formulier en moet niet meer aangepast worden. Enkele properties moeten nog wel doorgegeven worden, in het startbestand voor de BlogDetail component kan je een beschrijving vinden van elk van deze eigenschappen.

Figuur 8: BlogDetail component

Oplossingen

Oplossingen