react-lifecycle-z is a tiny, declarative lifecycle utility toolkit for React.
It provides clean, explicit lifecycle semantics without over-engineering or breaking React's mental model.
Write lifecycle like intent. Keep effects predictable.
useMount-- run logic on mountuseUpdate-- run logic on dependency updates (skip first render)useUnmount-- run cleanup logicuseLayoutMount-- layout-phase mount effectuseLifecycle-- object-style lifecycle API- StrictMode-safe mount option
- Optional transition support for updates
- Tiny, dependency-free core
- Fully TypeScript-ready
npm install react-lifecycle-zimport {
useMount,
useUpdate,
useUnmount
} from "react-lifecycle-z";
function Demo({ count }: { count: number }) {
useMount(() => {
console.log("Mounted");
});
useUpdate(() => {
console.log("Updated:", count);
}, [count]);
useUnmount(() => {
console.log("Unmounted");
});
return <div>{count}</div>;
}useLayoutMount(() => {
console.log("Layout mounted");
});useMount(() => {
console.log("Only once even in StrictMode dev");
}, { strict: true });useUpdate(() => {
setHeavyState(data);
}, [data], { transition: true });A more declarative way to describe lifecycle behavior:
import { useLifecycle } from "react-lifecycle-z";
useLifecycle(
{
mount: () => console.log("Mounted"),
update: () => console.log("Updated"),
unmount: () => console.log("Unmounted")
},
[value]
);This keeps lifecycle logic grouped and readable.
- No lifecycle engine
- No global orchestration
- No async in render
- No hidden magic
react-lifecycle-z keeps React effects explicit and predictable.
Lifecycle should remain simple --- just better expressed.
| Criteria | react-lifecycle-z | Raw useEffect |
|---|---|---|
| Mount helper | ✅ | |
| Update-only effect | ✅ | |
| Unmount helper | ✅ | |
| Object-style API | ✅ | ❌ |
| StrictMode-safe mount | ✅ | ❌ |
| Transition option | ✅ | startTransition |
| Bundle size | 🟢 Tiny | — |
| Mental model | React-native | React-native |
MIT
