Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

matthewp/haunted

Repository files navigation

Haunted πŸ¦‡ πŸŽƒ

npm npm

React's Hooks API but for standard web components and lit-html or hyperHTML.

πŸ“š Read the Docs πŸ“–

<html lang="en">
 <my-counter></my-counter>
 <script type="module">
 import { html } from 'https://unpkg.com/lit?module';
 import { component, useState } from 'https://unpkg.com/haunted/haunted.js';
 function Counter() {
 const [count, setCount] = useState(0);
 return html`
 <div id="count">${count}</div>
 <button type="button" @click=${() => setCount(count + 1)}>
 Increment
 </button>
 `;
 }
 customElements.define('my-counter', component(Counter));
 </script>
</html>

More example integrations can be found in this gist.

Hooks

Haunted supports the same API as React Hooks. The hope is that by doing so you can reuse hooks available on npm simply by aliasing package names in your bundler's config.

Currently Haunted supports the following hooks:

Function Signatures

// Or another renderer, see Guides
type Renderer = (element: Element) => TemplateResult;
interface Options {
 baseElement: HTMLElement;
 observedAttributes: string[];
 useShadowDOM: boolean
}
declare function component(
 renderer: Renderer,
 options: Options
): Element;
declare function component<BaseElement = HTMLElement>(
 renderer: Renderer,
 baseElement: BaseElement,
 options: Options
): Element
declare function virtual(renderer: Renderer): Directive

License

BSD-2-Clause

About

React's Hooks API implemented for web components πŸ‘»

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Contributors 34

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /