Skip to content

Commit 2abf53a

Browse files
authored
Merge pull request #31 from streamich/createMemo
Create memo
2 parents 25f6ea9 + 10c6906 commit 2abf53a

File tree

5 files changed

+72
-0
lines changed

5 files changed

+72
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
<br/>
7575
<br/>
7676
- [**State**](./docs/State.md)
77+
- [`createMemo`](./docs/createMemo.md) &mdash; factory of memoized hooks.
7778
- [`useGetSet`](./docs/useGetSet.md) &mdash; returns state getter `get()` instead of raw state.
7879
- [`useGetSetState`](./docs/useGetSetState.md) &mdash; as if [`useGetSet`](./docs/useGetSet.md) and [`useSetState`](./docs/useSetState.md) had a baby.
7980
- [`useObservable`](./docs/useObservable.md) &mdash; tracks latest value of an `Observable`.

docs/createMemo.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# `createMemo`
2+
3+
Hook factory, receives a function to be memoized, returns a memoized React hook,
4+
which receives the same arguments and returns the same result as the original function.
5+
6+
7+
## Usage
8+
9+
```jsx
10+
import {createMemo} from 'react-use';
11+
12+
const fibonacci = n => {
13+
if (n === 0) return 1;
14+
if (n === 1) return 2;
15+
return fibonacci(n - 1) + fibonacci(n - 2);
16+
};
17+
18+
const useMemoFibonacci = createMemo(fibonacci);
19+
20+
const Demo = () => {
21+
const result = useMemoFibonacci(10);
22+
23+
return (
24+
<div>
25+
fib(10) = {result}
26+
</div>
27+
);
28+
};
29+
```
30+
31+
32+
## Reference
33+
34+
```js
35+
const useMemoFn = createMemo(fn);
36+
```
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import * as React from 'react';
2+
import {storiesOf} from '@storybook/react';
3+
import {createMemo} from '..';
4+
import ShowDocs from '../util/ShowDocs';
5+
6+
const fibonacci = n => {
7+
if (n === 0) return 1;
8+
if (n === 1) return 2;
9+
return fibonacci(n - 1) + fibonacci(n - 2);
10+
};
11+
12+
const useMemoFibonacci = createMemo(fibonacci);
13+
14+
const Demo = () => {
15+
const result = useMemoFibonacci(10);
16+
17+
return (
18+
<div>
19+
fib(10) = {result}
20+
</div>
21+
);
22+
};
23+
24+
storiesOf('createMemo', module)
25+
.add('Docs', () => <ShowDocs md={require('../../docs/createMemo.md')} />)
26+
.add('Demo', () =>
27+
<Demo/>
28+
)

src/createMemo.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import {useMemo} from './react';
2+
3+
const createMemo = fn => (...args) => useMemo(() => fn(...args), args);
4+
5+
export default createMemo;

src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import createMemo from './createMemo';
12
import useAsync from './useAsync';
23
import useAudio from './useAudio';
34
import useBattery from './useBattery';
@@ -38,6 +39,7 @@ import useUpdate from './useUpdate';
3839
import useWindowSize from './useWindowSize';
3940

4041
export {
42+
createMemo,
4143
useAsync,
4244
useAudio,
4345
useBattery,

0 commit comments

Comments
 (0)