74 lines
1.6 KiB
Markdown
74 lines
1.6 KiB
Markdown
|
# babel-plugin-transform-hook-names
|
||
|
|
||
|
A babel plugin to automatically infer hook names from your code and show them in the [Preact Devtools](https://preactjs.github.io/preact-devtools/) extension.
|
||
|
|
||
|
Before:
|
||
|
|
||
|

|
||
|
|
||
|
After:
|
||
|
|
||
|

|
||
|
|
||
|
Requires: Babel >= 7.12
|
||
|
|
||
|
## Usage
|
||
|
|
||
|
Install `babel-plugin-transform-hook-names` in your project:
|
||
|
|
||
|
```bash
|
||
|
npm install --save-dev babel-plugin-transform-hook-names
|
||
|
# or via yarn
|
||
|
yarn add -D babel-plugin-transform-hook-names
|
||
|
```
|
||
|
|
||
|
Then add it to your babel configuration:
|
||
|
|
||
|
```json
|
||
|
{
|
||
|
"plugins": ["babel-plugin-transform-hook-names"]
|
||
|
}
|
||
|
```
|
||
|
|
||
|
## How does it work?
|
||
|
|
||
|
The way it works is that each hook is wrapped with a function that is passed the same name as the variable:
|
||
|
|
||
|
Input:
|
||
|
|
||
|
```js
|
||
|
// Works for "preact/compat" or "react" too
|
||
|
import { useState, useReducer, useRef } from "preact/hooks";
|
||
|
|
||
|
function Foo() {
|
||
|
const [text, setText] = useState("hello");
|
||
|
const [counter, increment] = useReducer(c => c + 1, 0);
|
||
|
const rootElement = useRef();
|
||
|
const memo = useMemo(() => text.toUpperCase(), ["text"]);
|
||
|
}
|
||
|
```
|
||
|
|
||
|
Output:
|
||
|
|
||
|
```js
|
||
|
import { addHookName } from "preact/devtools";
|
||
|
import { useState, useReducer, useRef } from "preact/hooks";
|
||
|
|
||
|
function Foo() {
|
||
|
const [text, setText] = addHookName(useState("hello"), "text");
|
||
|
const [counter, increment] = addHookName(
|
||
|
useReducer(c => c + 1, 0),
|
||
|
"counter",
|
||
|
);
|
||
|
const rootElement = addHookName(useRef(), "rootElement");
|
||
|
const memo = addHookName(
|
||
|
useMemo(() => text.toUpperCase(), ["text"]),
|
||
|
"memo",
|
||
|
);
|
||
|
}
|
||
|
```
|
||
|
|
||
|
## License
|
||
|
|
||
|
MIT, see the [LICENSE file](./LICENSE)
|