Repository created to record my practice learning React with exercises based on the Udemy Course of Stephen Grider.
- Status
- Requirements
- Setup
- How to run it
- Repo structure & what i learned in each exercise
- Other practice repos
- Current repo's version is
- This course has been completed on 28/04/2020 - Certificate
After finishing its related Udemy course, I archive this repository and unarchive it when I start a new training and add a link in the Other practice repos section referring to its new repo. But I don't update any associated dependency due to technology changes during the years between each practice, and the produced code which works with the mentioned requirements.
After cloning the repo, go to the created folder and install the node packages.
git clone https://github.com/NicolasOmar/react-practice.git
cd react-practice
npm run setup-allsetup-all is the command to install all the projects, but if you want to do it one by one, you can change that last line for one of the following:
| App Setup | Command |
|---|---|
| All | npm run setup-all |
| Comments | npm run setup-comments |
| Seasons | npm run setup-seasons |
| Finder | npm run setup-finder |
| Videos | npm run setup-videos |
| Songs | npm run setup-songs |
| Blog | npm run setup-blog |
| Streams | npm run setup-streams |
| Languages | npm run setup-languages |
| Posts | npm run setup-posts |
To run any specific exercise, execute the following command in the project´s folder:
npm startIn the seventh exercise, you have to run the following commands in different terminals:
npm run api
npm run media
npm start- Comments app (
1-commentsfolder)- Create a React project created with Create-react-app
- Use css classes, styles and js variables in jsx
- Component creation with data passing using
props& composition usingprops.children - Add mocked data with Faker.js
- Basic usage of Semantic UI as main UI library
- Seasons app (
2-seasonsfolder)- Use class based components
- How to use Gelocation API
- Handle states (creation and update)
- How to use
componentDidMount - How to use
DefaultProps
- Finder app (
3-finderfolder)- How to handle
Events - Make a controlled input using
states - Pass and invoke parent functions in children components
- Use Unsplash API to get photos
- Handle API request with Axios
- Add API folder to have a better project structure isolating API logic
- Handle a list of elements with Array.map function
- Show date formats with moment
- Basic css grid
- Handle DOM style with
React.createRef
- How to handle
- Videos app (
4-videosfolder)- Work with Google/Youtube API
- Better understanding of prop passing between parent and children components
- Songs app (
5-songsfolder)- Integrate Redux into a React project using React-Redux
- Work with
Providers,reducersandactionsto pass data between components
- Blog app (
6-blogfolder)- Handle asyncronous action creators by a middleware with redux-thunk
- Refactor code on
mapStateToPropsto use component props on the function - Reduce endpoint calls in action creators
- Streams app (
7-streamsfolder)- Handle web navigation with react-router-dom
- Understand differences between
BrowserRouter,HashRouter&MemoryRouter - Basic knowledge of Google Auth API
- Use redux on forms with redux-form
- Mount a small REST server with json-server
- Use lodash functions to array mapping and filtering
- Handle
routing historyin programatic way - Refactor Form Components
- Use
CreatePortalto handle modals - Handle a Real Time Monitoring System
- Create a streaming channel using OBS, node-media-server and flv.js
- Languages app (
8-languagesfolder)- Use
Contextas a alternative toReduxfor distribute data to the other components - How to use
ProviderandConsumer - How to replace Redux using a custom Context implementation
- Use
- Posts app (
9-postsfolder)- Use
Hookssystem to handle state data withuseStateand its updates withuseEffect - How to isolate Hooks logic to use it in other contexts
- Use
| Node | Angular | GraphQL | Typescript | HTML & CSS | Styling | Next.js | Python | Docker |
|---|---|---|---|---|---|---|---|---|