Skip to content

Commit f4fd748

Browse files
committed
feat: 🎸 add createRenderProp function for creating render-props
1 parent 565d2e9 commit f4fd748

File tree

4 files changed

+38
-0
lines changed

4 files changed

+38
-0
lines changed

docs/useKey.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,14 @@ const Demo = () => {
2020
};
2121
```
2222

23+
Or as render-prop:
24+
25+
```jsx
26+
import UseKey from 'react-use/lib/comps/UseKey';
27+
28+
<UseKey filter='a' fn={() => alert('"a" key pressed!')} />
29+
```
30+
2331

2432
## Reference
2533

src/comps/UseKey.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import createRenderProp from '../util/createRenderProp';
2+
import useKey from '../useKey';
3+
4+
const UseKey = createRenderProp(useKey, ({filter, fn, deps, ...rest}) => [filter, fn, rest, deps]);
5+
6+
export default UseKey;
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import {storiesOf} from '@storybook/react';
2+
import * as React from 'react';
3+
import UseKey from '../UseKey';
4+
5+
storiesOf('Components|<UseKey>', module)
6+
.add('Demo', () =>
7+
<div>
8+
Press "q" key!
9+
<UseKey filter='q' fn={() => alert('Q pressed!')} />
10+
</div>
11+
)

src/util/createRenderProp.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
const defaultMapPropsToArgs = props => [props];
2+
3+
const createRenderProp = (hook, mapPropsToArgs = defaultMapPropsToArgs) => {
4+
const RenderProp = (props) => {
5+
const state = hook(...mapPropsToArgs(props));
6+
const {children, render = children} = props;
7+
return render ? render(state) || null : null;
8+
};
9+
10+
return RenderProp;
11+
};
12+
13+
export default createRenderProp;

0 commit comments

Comments
 (0)