staged-components
Version:
Make React function component staged.
59 lines (46 loc) • 1.42 kB
Markdown
add staged-components
npm install --save staged-components
```
React Hook is awesome, but it has some kind of rules. One of these rules is ["Only Call Hooks at the Top Level"](https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level).
So the component below will cause an error:
```jsx
const App = function(props) {
if (props.user === undefined) return null
const [name, setName] = useState(props.user.name)
// React Hook "useState" is called conditionally. React Hooks must be called in the exact same order in every component render. Did you accidentally call a React Hook after an early return?
return (
<input value={name} onChange={(e) => {setName(e.target.value)}}/>
)
}
```
With `staged-components`, you can safely "break" this rule:
```jsx
const App = staged((props) => { // stage 1
if (props.user === undefined) return null
return () => { // stage 2
const [name, setName] = useState(props.user.name)
return (
<input value={name} onChange={(e) => {setName(e.target.value)}}/>
)
}
})
```
Usage with `forwardRef`:
```jsx
const App = forwardRef(staged((props, ref) => {
if (props.user === undefined) return null
return () => {
useImperativeHandle(ref, () => 'hello')
return (
<h1>{props.user.name}</h1>
)
}
}))
```
Make React function component staged.
```bash
yarn