@preact-signals/components v0.1.1
@preact-signals/components
Solidjs inspired components for React/Preact and signals.
Installation
You can install the library using npm:
npm i @preact-signals/components
yarn i @preact-signals/components
pnpm i @preact-signals/componentsWe are peer @preact/signals-react as peer dependency, so in case if you're using preact you need to resolve it into @preact/signals:
How to do it, just repeat it for @preact/signals-react. Example:
{
"alias": {
"react": "preact/compat",
"react-dom/test-utils": "preact/test-utils",
"react-dom": "preact/compat", // Must be below test-utils
"react/jsx-runtime": "preact/jsx-runtime",
"@preact/signals-react": "@preact/signals"
}
}Usage
To use the components in your Preact application, you can import them from the library:
import { Show, Switch } from "@preact-signals/components";
function App() {
const counter = useSignal(0);
return (
<div>
<Show when={() => counter.value % 2 === 0}>
<div>Even</div>
</Show>
<Switch fallback={<div>Not found</div>}>
<Match when={() => location.value.pathname === "/"}>
<div>Home</div>
</Match>
<Match when={() => location.value.pathname === "/about"}>
<div>About</div>
</Match>
</Switch>
</div>
);
}Components
Show
The Show component conditionally renders its children based on a signal or accessor. If the signal or accessor returns a truthy value, the children are rendered. Otherwise, the fallback prop is rendered (if provided).
import { useSignal } from "@preact/signals-react";
const counter = useSignal(0);
<Show when={counter}>{(currentCounter) => <div>{currentCounter}</div>}</Show>;You can also use an accessor function instead of a signal:
<Show when={() => counter() % 2 === 0}>
<div>Even</div>
</Show>Switch
The Switch component conditionally renders its children based on the first Match component whose when prop matches the current value of the when prop which is signal or accessor. If no Match components match, the fallback prop is rendered (if provided).
<Switch fallback={<div>Not found</div>}>
<Match when={location.pathname === "/"}>
<div>Home</div>
</Match>
<Match when={location.pathname === "/about"}>
<div>About</div>
</Match>
</Switch>Match
The Match component is used inside a Switch component to define a case that matches a particular value of the when prop which is signal or accessor.
<Switch fallback={<div>Not found</div>}>
<Match when={() => location.value.pathname === "/"}>
<div>Home</div>
</Match>
<Match when={useComputed(() => location.value.pathname === "/about")}>
<div>About</div>
</Match>
</Switch>This library is licensed under the MIT License. See the LICENSE file for details.