All files / src/chap07 HookMemo.js

0% Statements 0/15
100% Branches 0/0
0% Functions 0/7
0% Lines 0/11

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124                                                                                                                                                                                                                                                       
import { useMemo, useCallback, useState } from 'react';
import { MyButton, MyCounter } from './HookMemoChild';
 
// 인자 delay만 처리를 일시 정지하는 코드
const sleep = delay => {
  const start = Date.now();
  while (Date.now() - start < delay);
};
 
export default function HookMemo() {
  const [count1, setCount1] = useState(0);
  const [count2, setCount2] = useState(0);
  // MyButton에 넘겨주는 핸들러
  const increment = () => setCount1(c => c + 1);
  const decrement = () => setCount2(c => c - 1);
 
  // count1에 100을 더한 값을 계산하는 코드 (더미 헤비 처리)
  const heavyProcess = () => {
    sleep(1000);
    return count1 + 100;
  };
 
  return (
    <>
      {/* 값을 1씩 증가시키는 카운터 */}
      <div>
      <MyButton id="btn1" handleClick={increment}>카운트업</MyButton>
      <MyCounter id="c1" value={count1} />/
      {heavyProcess()}
      {/* {heavyProcess} */}
      </div>
      <div>
      {/* 값을 1씩 감소시키는 카운터 */}
      <MyButton id="btn2" handleClick={decrement}>카운트다운</MyButton>
      <MyCounter id="c2" value={count2} />
      </div>
    </>
  );
}
 
 
 
// Code 7-6-4
// import { useMemo, useCallback, useState } from 'react';
// import { MyButton, MyCounter } from './HookMemoChild';
 
// // 인자 delay만 처리를 일시 정지하는 코드
// const sleep = delay => {
//   const start = Date.now();
//   while (Date.now() - start < delay);
// };
 
// export default function HookMemo() {
//   const [count1, setCount1] = useState(0);
//   const [count2, setCount2] = useState(0);
//   // MyButton에 넘겨주는 핸들러
//   const increment = () => setCount1(c => c + 1);
//   const decrement = () => setCount2(c => c - 1);
 
//   // count1에 100을 더한 값을 계산하는 코드 (더미 헤비 처리)
//   const heavyProcess = useMemo(() => {
//     sleep(1000);
//     return count1 + 100;
//   }, [count1]);
  
//   return (
//     <>
//       {/* 값을 1씩 증가시키는 카운터 */}
//       <div>
//       <MyButton id="btn1" handleClick={increment}>카운트업</MyButton>
//       <MyCounter id="c1" value={count1} />/
//       {heavyProcess}
//       </div>
//       <div>
//       {/* 값을 1씩 감소시키는 카운터 */}
//       <MyButton id="btn2" handleClick={decrement}>카운트다운</MyButton>
//       <MyCounter id="c2" value={count2} />
//       </div>
//     </>
//   );
// }
 
 
 
// Code 7-6-6
// import { useMemo, useCallback, useState } from 'react';
// import { MyButton, MyCounter } from './HookMemoChild';
 
// // 인자 delay만 처리를 일시 정지하는 코드
// const sleep = delay => {
//   const start = Date.now();
//   while (Date.now() - start < delay);
// };
 
// export default function HookMemo() {
//   const [count1, setCount1] = useState(0);
//   const [count2, setCount2] = useState(0);
//   // MyButton에 넘겨주는 핸들러
//   const increment = useCallback(() => setCount1(c => c + 1), []);
//   const decrement = useCallback(() => setCount2(c => c - 1), []);
 
//   // count1에 100을 더한 값을 계산하는 코드 (더미 헤비 처리)
//   const heavyProcess = useMemo(() => {
//     sleep(1000);
//     return count1 + 100;
//   }, [count1]);
  
//   return (
//     <>
//       {/* 값을 1씩 증가시키는 카운터 */}
//       <div>
//       <MyButton id="btn1" handleClick={increment}>카운트업</MyButton>
//       <MyCounter id="c1" value={count1} />/
//       {heavyProcess}
//       </div>
//       <div>
//       {/* 값을 1씩 감소시키는 카운터 */}
//       <MyButton id="btn2" handleClick={decrement}>카운트다운</MyButton>
//       <MyCounter id="c2" value={count2} />
//       </div>
//     </>
//   );
// }