From 7ca8dfad249c1062ed4cfa6754ecc93aaaf54086 Mon Sep 17 00:00:00 2001 From: Robert Novo Date: Thu, 9 Jan 2020 19:46:23 +0100 Subject: [PATCH] updated readme --- lab2/README.md | 6 +++--- lab2/src/components/App/App.js | 2 +- lab2/src/components/List/List.js | 3 ++- lab3/README.md | 16 +++++++++------- lab3/src/actions/userActions.js | 10 ++++++++-- lab3/src/components/Container/Container.js | 2 +- 6 files changed, 24 insertions(+), 15 deletions(-) diff --git a/lab2/README.md b/lab2/README.md index c5011b0..1bd73c4 100644 --- a/lab2/README.md +++ b/lab2/README.md @@ -1,7 +1,7 @@ # Lab 2 ## Starta applikationen för Lab 2 -Från projektroten: `$ cd lab2`, `$ npm install` följt av `$ npm start`. Gå sedan in på http://localhost:3000/ för att öppna upp applikationen. +Från projektroten: `$ cd lab2`, `$ npm install` följt av `$ npm start`. Gå sedan in på http://localhost:3000/ för att öppna upp applikationen. ## Uppgift 1. Bekanta dig med hur applikationen är uppbyggt komponentmässigt. Utgå från `App.js`. @@ -9,9 +9,9 @@ Från projektroten: `$ cd lab2`, `$ npm install` följt av `$ npm start`. Gå se 3. Just nu går det inte att byta bakgrundfärg. Komponenten `App.js` har ett `state` för sidans bakgrundsfärg (`bgColor`). Använd callbacken från `BackgroundColorPicker` för att få färgväljaren att fungera. Hur sätts själva färgen? 4. Skicka in en lista med användare som `prop` till komponenten `List`. Hur hämtas listan med användare? 5. Användarna syns fortfarande inte listade. Använd __React Devtools Extension__ för att verifiera att komponenten `List` har fått in en lista med användare. -6. Rendera ut lista med användare i funktionen `render()` i komponenten `List.js`. Använd `.map(...)` för detta (hint: kika i `BackgroundColorPicker` om du kör fast). +6. Rendera ut lista med användare i funktionen `render()` i komponenten `List.js`. Använd `.map(...)` för detta (hint: kika i `BackgroundColorPicker` om du kör fast). 7. Nu vill vi kunna filtera listan. I `List.js` använader vi komponenten `SearchBar` som tar en callback, `onKeyPressed`. Vad vill vi göra då? Implementera `onKeyPressed()` i `List.js`! -8. Nu när `List.js` känner till söktermen vill vi filtrera listan av användare. Det finns en funktion `filterListItemsBySearchTerm()` som gör just detta. Instansiera konstanten `filteredItems` och iterera över denna istället för `this.props.items`. +8. Nu när `List.js` känner till söktermen vill vi filtrera listan av användare. Det finns en metod `filterListItemsBySearchTerm()` som gör just detta. Tilldela konstanten `filteredItems` och iterera över denna istället för `this.props.items`. ## Jag har tid över, vad gör jag nu? diff --git a/lab2/src/components/App/App.js b/lab2/src/components/App/App.js index 28aeeb6..d16e4ea 100644 --- a/lab2/src/components/App/App.js +++ b/lab2/src/components/App/App.js @@ -37,7 +37,7 @@ class App extends Component {

- + ); } diff --git a/lab2/src/components/List/List.js b/lab2/src/components/List/List.js index 486e90b..482e491 100644 --- a/lab2/src/components/List/List.js +++ b/lab2/src/components/List/List.js @@ -39,7 +39,8 @@ class List extends Component { {this.props.items.length === 0 ? (
Empty list...
) : (
    { - // TODO: Task 6. Iterate over items and return
  • -tags. + // TODO: Task 6. Map (see react-examples.md if stuck :D) over items and return
  • -tags. + //
  • A list item
  • console.log("ITEMS", this.props.items) }
diff --git a/lab3/README.md b/lab3/README.md index d84da44..e8ee65f 100644 --- a/lab3/README.md +++ b/lab3/README.md @@ -4,17 +4,17 @@ Från projektroten: `$ cd lab3`, `$ npm install` följt av `$ npm start`. Gå sedan in på http://localhost:3000/ för att öppna upp applikationen. ## Del 1 - Redux-snurran -1. Ta en till på befintliga komponenter och hur Redux-snurran är implementerad för att välja bakgrund. Ladda ner och använd [Redux DevTools](https://chrome.google.com/webstore/detail/redux-devtools/lmhkpmbekcpmknklioeibfkpmmfibljd) för detta. -2. Bakgrundsfärgen är satt till `lavender` från början. Hur sätts den? Byt default från `lavender` till `gold`. Ladda om sidan och se så att det fungerar. _Hint: Detta görs i en reducer_ +1. Ta en till på befintliga komponenter och hur Redux-snurran är implementerad för att välja bakgrund. Ladda ner och använd [Redux DevTools](https://chrome.google.com/webstore/detail/redux-devtools/lmhkpmbekcpmknklioeibfkpmmfibljd) för detta. +2. Bakgrundsfärgen är satt till `lavender` från början via initialState. Byt default från `lavender` till `gold`. Ladda om sidan och se så att det fungerar. _Hint: Detta görs i en reducer_ 3. Användarna visas inte i listan just nu. Börja med att dispatcha ett action när användare har hämtats asynkront i `userActions`. 4. När vi har dispatchat en action måste vi hantera den i våra reducers. Öppna `userReducers.js` och stoppa in resultatet från din nya action i applikationens state. -5. I `Container.js` har vi nu tillgång till applikationens state och dipatches tack vare `connect()`. Vi vill här hämta alla användare när componenten mountas. Implementera detta. -6. Nu när vi har användaran i vår store vill vi kunna läsa dom i komponenten `List.js`. Implementera funktionen `mapStateToProps()` i `List.js`. -7. Nu ska applikationen fungera fullt ut. Eftersom vi läser användare från store behöver vi inte längre skicka in `items` som `prop` när vi använder komponenten `` i `Container.js`. Ta bort den. Applikationen fungerar ändå. +5. I `Container.js` har vi nu tillgång till applikationens state och dipatches tack vare `connect()`. Vi vill här hämta alla användare när componenten mountas. Implementera detta. +6. Nu när vi har användaran i vår store vill vi kunna läsa dom i komponenten `List.js`. Implementera funktionen `mapStateToProps()` i `List.js`. _Hint: Check how mapStateToProps is used in `container.js`_ +7. Nu ska applikationen fungera fullt ut. Eftersom vi läser användare från store behöver vi inte längre skicka in `items` som `prop` när vi använder komponenten `` i `Container.js`. Ta bort den. Applikationen fungerar ändå. ## Del 2 - Egen komponent -Nu är det dags att sätta allt du lärt dig hittills på prov. Gör så långt du hinner. Uppgiften är att du ska skapa en egen komponent och visa detaljerad användarinformation i denna. I `List.js` finns det nu en callback, `onClick`, som kommer att skicka med ett id för användaren som klickades på. I `api.js` finns det en funktion som hämtar användardata basert på ett id. +Nu är det dags att sätta allt du lärt dig hittills på prov. Gör så långt du hinner. Uppgiften är att du ska skapa en egen komponent och visa detaljerad användarinformation i denna. I `List.js` finns det nu en callback, `onClick`, som kommer att skicka med ett id för användaren som klickades på. I `api.js` finns det en funktion som hämtar användardata baserat på ett id. För att lösa uppgiften behöver du: - Skapa en ny komponent `` (eller liknande namn) och använda denna i `Container.js`. @@ -24,4 +24,6 @@ För att lösa uppgiften behöver du: - Dispatcha ett nytt action för detaljerad användardata från `onItemClick()` i `List.js` via `connect`. - Läsa in den detaljerade användardatan från applikationens state till din nya komponent. -Lycka till! +##### _Del två finns löst i solutions-branchen om du bara vill se lösningen_ 😇 + +### Lycka till! diff --git a/lab3/src/actions/userActions.js b/lab3/src/actions/userActions.js index 6b2689e..283ff4d 100644 --- a/lab3/src/actions/userActions.js +++ b/lab3/src/actions/userActions.js @@ -4,10 +4,16 @@ export const USERS_RECEIVED = "USERS_RECEIVED"; export const GET_USERS_ERROR = "GET_USERS_ERROR"; export const getAllUsers = () => { + /* + Actions should generally be POJO (Plain JavaScript Object), but getting the users is made + asynchronously. + Thanks to the thunk middleware (declared in store.js) we can handle asynchronous events + in our actions. + */ return dispatch => { - getUsers() + getUsers() // Gets users from our API and returns a promise. .then((users) => { - // TODO: Task 3 - Dispatch async action. getUsers is a function from out api that returns a promise. + // TODO: Task 3 - Dispatch an action of type USERS_RECEIVED and payload: users. }) .catch((e) => { dispatch({ diff --git a/lab3/src/components/Container/Container.js b/lab3/src/components/Container/Container.js index 1bfef30..cd97d6b 100644 --- a/lab3/src/components/Container/Container.js +++ b/lab3/src/components/Container/Container.js @@ -29,7 +29,7 @@ class Container extends Component { } } -// Maps the aplication state directly to component props +// Maps the application state directly to component props const mapStateToProps = (state) => { return { backgroundColor: state.background.bgColor