Skip to content

Commit c360db4

Browse files
Update README.md
1 parent df3e270 commit c360db4

File tree

1 file changed

+65
-62
lines changed

1 file changed

+65
-62
lines changed

README.md

Lines changed: 65 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,29 @@
22

33
# FULL STACK COURSE 2023
44

5-
5+
## React JS MasterClass
66

7-
Hi, This is **CoderDost Youtube Channel** Full Stack Development Course [Course Link ](https://youtube.com/coderdost),
7+
Hi, This is course page of **CoderDost Youtube Channel** React JS 2023 Course [Course Link ](https://youtu.be/6l8RWV8D-Yo),
88

9-
### How to use this code :
9+
### How to use this code :
1010

11-
You can **download code** in 2 ways :
11+
#### You can **download code** in 2 ways :
1212

1313
1. **Git Commands**
1414

15-
- use `git clone <repository_url>`
15+
- use `git clone <repository_url>`
1616

17-
- checkout branch according to Chapter number `git checkout react-1`
17+
- checkout branch according to Chapter number `git checkout react-1`
1818

19-
- run `npm install` inside the root directory before running the code
19+
- run `npm install` inside the root directory before running the code
2020

2121

2222

2323
2. If you are not comfortable with git, directly **download the branch as Zip**.
2424

25-
- Choose branch related to the Chapter e.g. `react-1`
25+
- Choose branch related to the Chapter e.g. `react-1`
2626

27-
- run `npm install` inside the root directory before running the code
27+
- run `npm install` inside the root directory before running the code
2828

2929

3030

@@ -61,21 +61,21 @@ You can **download code** in 2 ways :
6161

6262
- **Assignment 1** : Create a simple React app for **RESUME Builder**. It will be static website. You have to make components like **Resume** as top level and under it - **Skills**, **Education**, **Experience** etc as components. All resume data will be under 1 big JavaScript object like which you can us in components via props. You can fix the number of items in **Skills**, **Education**, **Experience** or any section. Example you can say that only 3 experience items is allowed.
6363

64-
```
64+
```
6565
resume = {
6666
experience : [ { year:2012, company:'xyz', role:'something' }],
6767
education:[ ],
6868
skills : [ 'react js', 'node js']
6969
.....
7070
...
7171
}
72-
```
72+
```
7373

74-
> You can choose any simple HTML layout and convert it to React Components
74+
> You can choose any simple HTML layout and convert it to React Components
7575
76-
Example Link : [ Resume HTML ](https://codepen.io/emzarts/pen/OXzmym)
76+
Example Link : [ Resume HTML ](https://codepen.io/emzarts/pen/OXzmym)
7777

78-
### Special Assignments ==============
78+
### Special Assignments ==============
7979

8080
- **Assignment 2** : Create a Parent Component called **Border** which can provide some CSS border to any component nested into it. [Hint : You will need to use `children` props here
8181
< Border>
@@ -93,28 +93,28 @@ You can **download code** in 2 ways :
9393

9494

9595
- **Assignment 1** : Make a simple component which can conditionally render a list with **number** or **alphabets** or ***bullets*** in HTML for number. e..g. use a prop like `layout` for this. Also use a prop `items` for array of items in list.
96-
```
96+
```
9797
< List layout="numbered" items={items}/>
9898
< List layout="alpha" items={items}/>
9999
< List layout="bullet" items={items}/>
100-
```
100+
```
101101

102102
- **Assignment 2** : This is continuation of previous assignment **RESUME Builder**
103-
1. In this part you have to make some conditional rendering. Suppose if any section doesn't exist you have to remove that section from **Resume**. Example if `skills` is empty array than don't display `skills` section in Resume.
104-
2. You have to use `map` in most places where there are arrays. Like **Skills**, **Education**, **Experience** if there are 3 entries, use `map` to display 3 experience items. You don't need fix number of items. Any array can have 1 to 10(or some Limit) any number of items. You can put some Limit, so that your layout is not affected.
105-
3. Conditionally put some styling to **Resume**. Like `light` theme or `dark` theme or any other way you can switch the CSS layouts.
103+
1. In this part you have to make some conditional rendering. Suppose if any section doesn't exist you have to remove that section from **Resume**. Example if `skills` is empty array than don't display `skills` section in Resume.
104+
2. You have to use `map` in most places where there are arrays. Like **Skills**, **Education**, **Experience** if there are 3 entries, use `map` to display 3 experience items. You don't need fix number of items. Any array can have 1 to 10(or some Limit) any number of items. You can put some Limit, so that your layout is not affected.
105+
3. Conditionally put some styling to **Resume**. Like `light` theme or `dark` theme or any other way you can switch the CSS layouts.
106106

107-
```
107+
```
108108
resume = {
109109
experience : [ { year:2012, company:'xyz', role:'something' }],
110110
education:[ ],
111111
skills : [ 'react js', 'node js']
112112
.....
113113
...
114114
}
115-
```
115+
```
116116

117-
> You can choose any simple HTML layout and convert it to React Components
117+
> You can choose any simple HTML layout and convert it to React Components
118118
119119
Example Link : [ Resume HTML ](https://codepen.io/emzarts/pen/OXzmym)
120120

@@ -167,42 +167,42 @@ You can **download code** in 2 ways :
167167

168168
## Chapter 5 - State, useState Hooks
169169

170-
**Assignment 1** : Make a digital **CLOCK** Component using useEffect Hook. We need to only update the time Upto seconds in it. HH:MM:SS format can be used. Can you make it send a Console.log at end of every minute ?
170+
- **Assignment 1** : Make a digital **CLOCK** Component using useEffect Hook. We need to only update the time Upto seconds in it. HH:MM:SS format can be used. Can you make it send a Console.log at end of every minute ?
171171

172-
**Assignment 2** : Implement a simple **TIMER** that displays the elapsed time since the start button was pressed, and it can be stopped and reset. Like a stopwatch.
172+
- **Assignment 2** : Implement a simple **TIMER** that displays the elapsed time since the start button was pressed, and it can be stopped and reset. Like a stopwatch.
173173

174174

175175

176176

177177
## Chapter 6 - Form , Synthetic Event Object & Lifting State up
178178

179179

180-
**Assignment 1** : Create a Dropdown (< Select >) menu which is formed by a `nations` array. You can push to this array new items using a 2 **input textbox** (for country name and code) and **button**.
180+
- **Assignment 1** : Create a Dropdown (< Select >) menu which is formed by a `nations` array. You can push to this array new items using a 2 **input textbox** (for country name and code) and **button**.
181181
On selection of the any option from dropdown, its value should be displayed on console.log
182-
```
183-
const nations = [
182+
```
183+
const nations = [
184184
{ name: 'India', value: 'IN' },
185185
{ name: 'Pak', value: 'PK' },
186186
{ name: 'Bangladesh', value: 'BG' },
187-
]
188-
```
187+
]
188+
```
189189

190190

191191
- **Assignment 2** : **FILTERED LIST** : Make a **List** of something using an Array (a list can of cricket player /countries/ movie name etc). Now make this list it searchable, you have to put a **input textbox** at top of list. When you type in **textbox** it should only show you items matching from text typed. For example -
192192
If you type only "in" it should show things like "India" / "China" as both have `in` in it.
193193
- **Assignment 2.1** : **FILTERED LIST** : Make above **List** as separate components for List, Input form and pass the states from each other using concepts learnt till now.
194194

195195

196-
**Assignment 3** :
196+
- **Assignment 3** :
197197

198198
This is continuation of previous assignment **RESUME Builder**. Now you have to make a separate component **ResumeEditor** which has a **FORM**. This form will have many **input boxes**. Each one related to one section. For example you can have one input box or **experience** section. Another input box for **skill** section and like this. Every input box should have an **Add** button in front of it. Once you press this add button that information is stored in the state , which you can update at top of the App level. Now this state should update the **Resume** Component and its child you have built.
199-
- first component will be your **RESUME** document which is only for reading purpose.
199+
- first component will be your **RESUME** document which is only for reading purpose.
200200
- second component will be this **FORM**
201201
- you have to manage the state in between
202202
- only Add functionality is required in this assignment
203203
- you can change input boxes according to your need depending on your format of Resume. You can have multiple textboxes also for same section. Like for date + experience item etc.
204204

205-
**Assignment 4** : Try this challenge : https://beta.reactjs.org/learn/state-a-components-memory#challenges
205+
- **Assignment 4** : Try this challenge : https://beta.reactjs.org/learn/state-a-components-memory#challenges
206206

207207
### Related Videos :
208208

@@ -267,23 +267,21 @@ Todo app can be used to maintain a list of your pending daily items. A Simple to
267267

268268
## Chapter 7 - More State & useEffect hooks
269269

270-
**Assignment 1** : The method shown in this video was just to introduce **useEffect** hook. However that was not the correct use of useEffect hook. Can you change the code to remove useEffect and still have the editVideo functionality. [ *Hint : use the concept that Component is rendered every time prop changes* ]
270+
- **Assignment 1** : The method shown in this video was just to introduce **useEffect** hook. However that was not the correct use of useEffect hook. Can you change the code to remove useEffect and still have the editVideo functionality. [ *Hint : use the concept that Component is rendered every time prop changes* ]
271271

272-
**Assignment 2** :
273-
274-
This is continuation of previous assignment **RESUME Builder**.
275-
- Add functionality to **delete** the items from resume.
276-
- Add functionality to **update** the items from resume.
277-
- you have to manage the state in between
278-
- you can change input boxes according to your need depending on your format of Resume. You can have multiple textboxes also for same section. Like for date + experience item etc.
279-
- Check the output can be printed perfectly in PDF.
272+
- **Assignment 2** : This is continuation of previous assignment **RESUME Builder**.
273+
- Add functionality to **delete** the items from resume.
274+
- Add functionality to **update** the items from resume.
275+
- you have to manage the state in between
276+
- you can change input boxes according to your need depending on your format of Resume. You can have multiple textboxes also for same section. Like for date + experience item etc.
277+
- Check the output can be printed perfectly in PDF.
280278

281279

282280
## Chapter 8 - useReducer
283281

284-
**Assignment 1** : Try this challenge : https://beta.reactjs.org/learn/extracting-state-logic-into-a-reducer#challenges
282+
- **Assignment 1** : Try this challenge : https://beta.reactjs.org/learn/extracting-state-logic-into-a-reducer#challenges
285283

286-
**Assignment 2** : Convert your **RESUME BUILDER** Application from `useState` to `useReducer` by converting states logic to a common reducer. Your reducer can have as many switch cases as you want. You can also divide them based on sections. `ADD_SKILL`, `ADD_EXPERIENCE` etc. to make logic even simpler for developer.
284+
- **Assignment 2** : Convert your **RESUME BUILDER** Application from `useState` to `useReducer` by converting states logic to a common reducer. Your reducer can have as many switch cases as you want. You can also divide them based on sections. `ADD_SKILL`, `ADD_EXPERIENCE` etc. to make logic even simpler for developer.
287285

288286
### Related Videos :
289287

@@ -293,32 +291,32 @@ Todo app can be used to maintain a list of your pending daily items. A Simple to
293291

294292
## Chapter 9 - Context API & useContext
295293

296-
**Assignment 1** : Try this challenge :
294+
- **Assignment 1** : Try this challenge :
297295
https://beta.reactjs.org/learn/passing-data-deeply-with-context#challenges
298296

299-
**Assignment 2** : Add a Context to your **RESUME BUILDER** to change font-size, font-color and some other font-properties. Also add a form to changed these property at top of App.
297+
- **Assignment 2** : Add a Context to your **RESUME BUILDER** to change font-size, font-color and some other font-properties. Also add a form to changed these property at top of App.
300298

301-
**Assignment 3** : Add a Context to your **RESUME BUILDER** to change Dark Mode and Light Mode. You can also use a `React Switch` kind of library to make it more user friendly to switch.
299+
- **Assignment 3** : Add a Context to your **RESUME BUILDER** to change Dark Mode and Light Mode. You can also use a `React Switch` kind of library to make it more user friendly to switch.
302300

303301

304302
## Chapter 10 - Context API with useReducer [Redux architecture]
305303

306304
### Special Assignments
307305

308-
**Assignment 1** : Make a **useCounter** Hook: To keep track of a number that can be incremented or decremented.
306+
- **Assignment 1** : Make a **useCounter** Hook: To keep track of a number that can be incremented or decremented.
309307
``` const [count, increment, decrement] = useCounter(0);```
310308

311309

312310
## Chapter 11 - useRef
313311

314-
**Assignment 1** : Try this challenge:
312+
- **Assignment 1** : Try this challenge:
315313

316314
https://beta.reactjs.org/learn/referencing-values-with-refs#challenges
317315

318-
**Assignment 2** : Try this challenge:
316+
- **Assignment 2** : Try this challenge:
319317
https://beta.reactjs.org/learn/manipulating-the-dom-with-refs#challenges
320318

321-
**Assignment 3** : Make a **useWindowSize** Hook: which returns size of current browser window.
319+
- **Assignment 3** : Make a **useWindowSize** Hook: which returns size of current browser window.
322320
``` const [width, height] = useWindowSize();```
323321

324322

@@ -331,21 +329,23 @@ https://beta.reactjs.org/learn/manipulating-the-dom-with-refs#challenges
331329

332330
## Chapter 12 - useEffect and API calling
333331

334-
**Assignment 1** : Try this challenge :
332+
- **Assignment 1** : Try this challenge :
335333

336334
https://beta.reactjs.org/learn/synchronizing-with-effects#challenges
337-
**Assignment 2** : Try this challenge :
335+
336+
- **Assignment 2** : Try this challenge :
338337

339338
https://beta.reactjs.org/learn/removing-effect-dependencies#challenges
340339

341-
**Assignment 3** : Try this challenge :
340+
- **Assignment 3** : Try this challenge :
341+
342342
https://beta.reactjs.org/learn/reusing-logic-with-custom-hooks#challenges
343343

344-
**Assignment 4** Use **JSON Placeholder API** (link given below).
345-
- You have to create a button which can get some posts and show them in a List.
346-
- You have to a **show comments** button on each list item. On click of show comments, Post's comments should be fetched below that list item. [ Comments are available for each post in API]
347-
- When you click on a particular list item's show comments, it should expand and **show** comments, otherwise it should collapse and **hide** the comments.
348-
- Try to optimize by :
344+
- **Assignment 4** Use **JSON Placeholder API** (link given below).
345+
- You have to create a button which can get some posts and show them in a List.
346+
- You have to a **show comments** button on each list item. On click of show comments, Post's comments should be fetched below that list item. [ Comments are available for each post in API]
347+
- When you click on a particular list item's show comments, it should expand and **show** comments, otherwise it should collapse and **hide** the comments.
348+
- Try to optimize by :
349349

350350
- Only getting comments of required Post items (not all at a time)
351351
- Storing somehow the old comments of closed list items. So you will not fetch them again, when your show comments again.
@@ -361,21 +361,24 @@ https://beta.reactjs.org/learn/reusing-logic-with-custom-hooks#challenges
361361

362362
## Chapter 13 - Memoization - useMemo, useCallback, memo
363363

364-
**Assignment 1** : Implement a component that displays a list of items. The component should memoize the list of items to prevent unnecessary re-rendering.
364+
- **Assignment 1** : Implement a component that displays a list of items. The component should memoize the list of items to prevent unnecessary re-rendering.
365+
366+
- **Assignment 2**: How to use memoization in the **JSON Placeholder API** assignment in previous problem. Can you try to **optimize** it using **useMemo/useCallback** ?
367+
368+
- **Assignment 3**: **useMemo** and **useCallback** are same hook. useCallback is just a convenient hook way to write **useMemo** for functions. Prove this using **useMemo** in place of **useCallback** in any previous problem. *[ Hint : you will have to change the useMemo callback and return the function definition ]*
365369

366-
**Assignment 2**: How to use memoization in the **JSON Placeholder API** assignment in previous problem. Can you try to **optimize** it using **useMemo/useCallback** ?
367370

368371

369372
## Chapter 14 - Advanced React - Part 1
370373

371374

372-
**Assignment 1** :
375+
- **Assignment 1** :
373376
Try to apply `useDeferredValue` and `useTransistion` hooks on API based components. Either make a new one or use any existing code you have from other assignments. You can use `Chrome Network throttling` from **Devtools** > **Performance** Tabs and use **Slow 3G** option to see the effects
374377

375378

376379

377380
## Chapter 15 - Advanced React - Part 2
378381

379-
**Assignment 1** :
382+
- **Assignment 1** :
380383
Try to use `window.print` functionality as show in code without flushSync and see if really make a difference. Also, try the same on `alert` functionality, can it also work ?
381384

0 commit comments

Comments
 (0)