Computed fields that automatically update when dependencies change
Age: 25 years old
{
"firstName": "John",
"lastName": "Doe",
"age": 25
}{
"fullName": "John Doe",
"isAdult": true
}Component renders: 0 | This component re-renders when any of its subscribed fields (including derived ones) change.
Derived fields automatically recompute when their dependencies change:
fullName updates when firstName or lastName changesisAdult updates when age changesconst userStore = createFieldStore({
firstName: "John",
lastName: "Doe",
age: 25,
})
.derived(
"fullName",
["firstName", "lastName"],
({ firstName, lastName }) =>
`${firstName} ${lastName}`
)
.derived(
"isAdult",
["age"],
({ age }) => age >= 18
);function UserCard() {
const { fullName, isAdult } =
userStore.useFields(["fullName", "isAdult"]);
return (
<div>
<h2>{fullName}</h2>
{isAdult && <span>🔞 Adult</span>}
</div>
);
}const userStore = createFieldStore({
firstName: "John",
lastName: "Doe",
age: 25,
salary: 50000,
})
.derived("fullName", ["firstName", "lastName"],
({ firstName, lastName }) => `${firstName} ${lastName}`)
.derived("isAdult", ["age"],
({ age }) => age >= 18)
.derived("ageGroup", ["age"], ({ age }) => {
if (age < 18) return "minor";
if (age < 65) return "adult";
return "senior";
})
.derived("displayInfo", ["fullName", "ageGroup", "salary"],
({ fullName, ageGroup, salary }) =>
`${fullName} (${ageGroup}) - $${salary.toLocaleString()}`);