Values that auto-update when their dependencies change. No manual tracking needed!
createComputed()Change width or height - watch all calculated values update automatically!
const [width, setWidth] = useSignal(10);
const [height, setHeight] = useSignal(5);const area = createComputed(() => width * height);💡 SignalForge automatically tracks that this depends on width and height!
const areaValue = useSignalValue(area); // 50
setWidth(20); // area recalculates automatically! ✨import { useSignal, createComputed, useSignalValue } from 'signalforge/react';
import { useState } from 'react';
function RectangleCalculator() {
// Create source signals
const [width, setWidth] = useSignal(10);
const [height, setHeight] = useSignal(5);
// Create computed signals - these auto-update!
const [area] = useState(() =>
createComputed(() => width * height)
);
const [perimeter] = useState(() =>
createComputed(() => 2 * (width + height))
);
// Read computed values
const areaValue = useSignalValue(area);
const perimeterValue = useSignalValue(perimeter);
return (
<div>
<h2>Area: {areaValue}</h2>
<h2>Perimeter: {perimeterValue}</h2>
<input
value={width}
onChange={(e) => setWidth(Number(e.target.value))}
/>
{/* When width changes, area and perimeter
automatically recalculate! */}
</div>
);
}
// ✨ Benefits:
// • No manual dependency tracking
// • Only recalculates when dependencies change
// • Can chain computed signals together
// • Zero boilerplatetotal = sum(items.map(i => i.price * i.qty))avgRevenue = totalRevenue / daysCountisValid = email.valid && password.length > 8score = kills * 100 + bonuses - penalties