Skip to content

Commit eb945da

Browse files
react-13
1 parent e800f68 commit eb945da

File tree

5 files changed

+73
-58
lines changed

5 files changed

+73
-58
lines changed

src/App.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useReducer, useState } from 'react';
1+
import { useCallback, useReducer, useState } from 'react';
22
import './App.css';
33
import AddVideo from './components/AddVideo';
44
import videoDB from './data/data';
@@ -35,9 +35,10 @@ function App() {
3535
}
3636
const [videos, dispatch] = useReducer(videoReducer, []);
3737

38-
function editVideo(id) {
38+
const editVideo = useCallback(function editVideo(id) {
3939
setEditableVideo(videos.find((video) => video.id === id));
40-
}
40+
},[videos])
41+
4142

4243
return (
4344
<ThemeContext.Provider value={mode}>

src/components/Counter.js

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
import { useRef, useState } from "react";
1+
import { useMemo, useRef, useState, useCallback } from "react";
2+
3+
24

35
function Counter(){
46
console.log('render Counter')
5-
const [number, setNumber] = useState(0);
7+
const [number, setNumber] = useState(10);
68
let num = useRef(0);
79

810
function handleClick(e){
@@ -16,9 +18,20 @@ function Counter(){
1618
console.log(num.current)
1719
}
1820

21+
const fibFx = useCallback(function fib(n){ //1,1,2,3,5
22+
if(n===1 || n===2){
23+
return 1
24+
}
25+
return fib(n-1)+fib(n-2)
26+
},[])
27+
28+
29+
const fibMemoized = useMemo(()=>fibFx(number),[number,fibFx])
30+
1931
return(
2032
<>
21-
<h1 style={{color:'white'}}>{number}</h1>
33+
34+
<h1 style={{color:'white'}}>{number} | {fibMemoized}</h1>
2235
<button onClick={handleClick}>Add</button>
2336
</>
2437
)

src/components/PlayButton.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import './PlayButton.css';
2-
import { useContext, useState } from 'react';
2+
import { useContext, useState, memo } from 'react';
33
import ThemeContext from '../context/ThemeContext';
44

5-
function PlayButton({message,children,onPlay,onPause}){
5+
const PlayButton = memo(function PlayButton({message,children,onPlay,onPause}){
66
console.log('render PlayButton')
77
const theme = useContext(ThemeContext)
88

@@ -21,6 +21,6 @@ function PlayButton({message,children,onPlay,onPause}){
2121
<button className={theme} onClick={handleClick}>{children} : {playing?'⏸️':'⏯️'}</button>
2222
)
2323

24-
}
24+
});
2525

2626
export default PlayButton;

src/components/Video.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import { useContext, useEffect } from 'react';
1+
import { useContext, useEffect,memo } from 'react';
22
import ThemeContext from '../context/ThemeContext';
33
import useVideoDispatch from '../hooks/VideoDispatch';
44
import './Video.css';
55

6-
function Video({title,id,channel="Coder Dost",views,time,verified,children,editVideo}) {
6+
const Video = memo(function Video({title,id,channel="Coder Dost",views,time,verified,children,editVideo}) {
77
console.log('render Video',id)
88
const theme = useContext(ThemeContext)
99
const dispatch = useVideoDispatch()
@@ -42,6 +42,6 @@ function Video({title,id,channel="Coder Dost",views,time,verified,children,editV
4242
</div>
4343
</>
4444
);
45-
}
45+
})
4646

4747
export default Video;

src/components/VideoList.js

Lines changed: 47 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,57 @@
1-
import Video from "./Video";
2-
import PlayButton from "./PlayButton";
3-
import useVideos from "../hooks/Videos";
1+
import Video from './Video';
2+
import PlayButton from './PlayButton';
3+
import useVideos from '../hooks/Videos';
44
import axios from 'axios';
5-
import {useState, useEffect} from 'react';
6-
import useVideoDispatch from "../hooks/VideoDispatch";
5+
import { useState, useEffect, useCallback, useMemo } from 'react';
6+
import useVideoDispatch from '../hooks/VideoDispatch';
77

8-
function VideoList({editVideo}){
9-
const url ="https://my.api.mockaroo.com/video.json?key=2a12c4d0"
8+
function VideoList({ editVideo }) {
9+
const url = 'https://my.api.mockaroo.com/video.json?key=2a12c4d0';
1010

11-
const videos = useVideos()
12-
const dispatch = useVideoDispatch();
11+
const videos = useVideos();
12+
const dispatch = useVideoDispatch();
1313

14-
async function handleClick (){
14+
async function handleClick() {
1515
const res = await axios.get(url);
16-
console.log('getVideos', res.data)
17-
dispatch({type:'LOAD',payload:res.data})
18-
}
16+
console.log('getVideos', res.data);
17+
dispatch({ type: 'LOAD', payload: res.data });
18+
}
1919

20-
useEffect(()=>{
21-
async function getVideos (){
20+
useEffect(() => {
21+
async function getVideos() {
2222
const res = await axios.get(url);
23-
console.log('getVideos', res.data)
24-
dispatch({type:'LOAD',payload:res.data})
25-
}
26-
getVideos()
27-
},[dispatch])
23+
console.log('getVideos', res.data);
24+
dispatch({ type: 'LOAD', payload: res.data });
25+
}
26+
getVideos();
27+
}, [dispatch]);
2828

29-
30-
return(
31-
<>
32-
{videos.map((video) => (
33-
<Video
34-
key={video.id}
35-
title={video.title}
36-
views={video.views}
37-
time={video.time}
38-
channel={video.channel}
39-
verified={video.verified}
40-
id={video.id}
41-
editVideo={editVideo}
42-
>
43-
<PlayButton
44-
onPlay={() => console.log('Playing..',video.title)}
45-
onPause={() => console.log('Paused..',video.title)}
46-
>
47-
{video.title}
48-
</PlayButton>
49-
</Video>
50-
))}
51-
<button onClick={handleClick}>Get Videos</button>
52-
</>
53-
)
29+
const play = useCallback(() => console.log('Playing..'), []);
30+
const pause = useCallback(() => console.log('Pause..'), []);
31+
const memoButton = useMemo(() => (
32+
<PlayButton onPlay={play} onPause={pause}>
33+
Play
34+
</PlayButton>
35+
),[pause, play]);
36+
return (
37+
<>
38+
{videos.map((video) => (
39+
<Video
40+
key={video.id}
41+
title={video.title}
42+
views={video.views}
43+
time={video.time}
44+
channel={video.channel}
45+
verified={video.verified}
46+
id={video.id}
47+
editVideo={editVideo}
48+
>
49+
{memoButton}
50+
</Video>
51+
))}
52+
<button onClick={handleClick}>Get Videos</button>
53+
</>
54+
);
5455
}
5556

56-
export default VideoList
57+
export default VideoList;

0 commit comments

Comments
 (0)