[Solid] Syntax | 03. Memo

2024. 6. 20. 15:47·Frontend/SolidJS

Memo는 effect와 같이 signal의 값에 따라 반응하지만, 읽기 전용인 signal입니다.

 

Memo는 signal값이 변경되면서 함께 업데이트되지만,

 

다음 업데이트 전 까지는 여러번 호출되어도 한 번만 실행됩니다.

 

이를 통해 중복 계산을 줄이는 캐시로서 사용할 수 있습니다.

 

Memo는 createMemo( ) 함수를 통해 사용할 수 있습니다.

// createMemo를 사용하기 위해 먼저 불러와야 합니다.
import { createMemo } from 'solid-js';

// signal이 바뀔 때마다 prop으로 받은 함수를 실행한 뒤 반환값을 저장합니다.
const f = createMemo(function);

 

아래 예시는 피보나치 수열의 n번째 수를 10×5 배열로 출력하는 코드입니다.

 

Memo인 fib()를 50번 호출하지만, 실제 계산은 단 한 번만 실행됩니다.

 

물론 count값이 바뀌면 함수 또한 변경된 count 값에 맞게 계산됩니다.

import { render } from 'solid-js/web';
import { createSignal, createMemo } from 'solid-js';

function fibonacci(num) {
  if (num <= 1) return 1;

  return fibonacci(num - 1) + fibonacci(num - 2);
}

function App() {
  const [count, setCount] = createSignal(10);
  const fib = createMemo(() => {
    console.log('Calculating Fibonacci');
    return fibonacci(count());
  });

  // fib()는 50번 호출되지만, 단 한 번만 계산됩니다.
  return (
    <>
      <button onClick={() => setCount(count() + 1)}>Count: {count()}</button>
      <div>1. {fib()} {fib()} {fib()} {fib()} {fib()}</div>
      <div>2. {fib()} {fib()} {fib()} {fib()} {fib()}</div>
      <div>3. {fib()} {fib()} {fib()} {fib()} {fib()}</div>
      <div>4. {fib()} {fib()} {fib()} {fib()} {fib()}</div>
      <div>5. {fib()} {fib()} {fib()} {fib()} {fib()}</div>
      <div>6. {fib()} {fib()} {fib()} {fib()} {fib()}</div>
      <div>7. {fib()} {fib()} {fib()} {fib()} {fib()}</div>
      <div>8. {fib()} {fib()} {fib()} {fib()} {fib()}</div>
      <div>9. {fib()} {fib()} {fib()} {fib()} {fib()}</div>
      <div>10. {fib()} {fib()} {fib()} {fib()} {fib()}</div>
    </>
  );
}

render(() => <App />, document.getElementById('app'))
728x90

'Frontend > SolidJS' 카테고리의 다른 글

[Solid] Syntax | 05. onMount & onCleanup  (0) 2024.06.20
[Solid] Syntax | 04. Control Flow  (0) 2024.06.20
[Solid] Syntax | 02. Effect  (0) 2024.06.20
[Solid] Syntax | 01. Signal  (0) 2024.06.20
[Solid] SolidJS에 대해서  (0) 2024.06.20
'Frontend/SolidJS' 카테고리의 다른 글
  • [Solid] Syntax | 05. onMount & onCleanup
  • [Solid] Syntax | 04. Control Flow
  • [Solid] Syntax | 02. Effect
  • [Solid] Syntax | 01. Signal
Rayi
Rayi
  • Rayi
    아카이브
    Rayi
  • 전체
    오늘
    어제
    • 분류 전체보기 (276)
      • CS (40)
        • CV (2)
        • PS (34)
      • Reveiw (18)
        • Paper (18)
        • Github (0)
      • ML (8)
        • Pytorch (5)
      • Language (59)
        • Python (8)
        • JavaScript (32)
        • TypeScript (16)
        • C++ (3)
      • IDE (12)
      • Git (13)
      • Frontend (77)
        • React (8)
        • ReactNative (6)
        • SolidJS (20)
        • CSS (12)
      • Backend (44)
        • DB (18)
        • Node.js (11)
      • UI (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ts
    DB
    vscode
    Git
    CSS
    CS
    expo
    js
    PyTorch
    SOLID
    ML
    PRISMA
    mongo
    GAN
    nodejs
    postgresql
    review
    deploy
    frontend
    figma
    Three
    ps
    CV
    backend
    Express
    ReactNative
    react
    API
    modal
    python
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
Rayi
[Solid] Syntax | 03. Memo
상단으로

티스토리툴바