useReactive
Make an object reactive.
Parameters
target
: object - Data to make reactive.readonly
: boolean - Whether data is read only.
Return
Proxied object, uses Proxy internally.
Type Declaration
declare function useReactive<T extends object>(target: T, readonly?: boolean): T
Example
import { useReactive } from 'gyron'
const original = {
x: 0,
y: 0,
}
const observed = useReactive(original)
original !== observed // true
isResponsive
Check if object is reactive.
Type Declaration
declare function isResponsive(target: any): boolean
Example
import { isResponsive } from 'gyron'
isResponsive({}) // false
isResponsive(useReactive({})) // true
useValue
Make primitive data reactive using value property. Internally uses useReactive
and proxies value property.
Parameters
value
: any - Data to proxy, can be primitive like number or boolean.
Return
Proxied object, accessed via .value
.
Type Declaration
declare function useValue<T = any>(value: T): Primitive<T>
Example
import { useValue } from 'gyron'
const original = useValue(0)
original.value === 0 // true
useComputed
Like JavaScript accessor properties, but dependency change triggers computed value update.
Parameters
getter
: Function - Get reactive data.setter
: Function - Set reactive data.dependency
: () => T - Computed dependency.
Return
Proxied object, reads and writes observable.
Type Declaration
declare function useComputed<T>(getter: () => T): Computed<T>
declare function useComputed<T>(
getter: () => T,
dependency: Dependency[]
): Computed<T>
declare function useComputed<T>(
getter: () => T,
setter: (value: T) => void,
dependency: Dependency[]
): Computed<T>
Example
import { useValue, useComputed } from 'gyron'
const original = useValue(0)
const observed = useComputed(() => {
return original.value + 1
})
original.value = 10
observed.value === 11 // true
useMemo
Same as above but with one difference.
Value will not update if dependencies have not changed. Use useComputed to address this.
Example
import { useValue, useMemo } from 'gyron'
const original = useValue(0)
const memo = useMemo(() => {
return Date.now() + original.value
})
memo.value === memo.value // true
useEffect
Re-runs function when dependencies change, can watch data changes.
Parameters
fn
: Function - Function to run on change.dependency
: () => T - Custom dependencies.
Return
ReactiveEffectRunner
- Returns function. useEffect property can stop reactivity.
Type Declaration
declare function useEffect<T = any>(
fn: (...args: any) => T,
dependency?: Dependency[]
): ReactiveEffectRunner<T>
Example
import { useValue, useComputed } from 'gyron'
const original = useValue(0)
let dummy: number
const s = useEffect(() => {
dummy = original.value
})
original.value = 10
dummy === original.value // true
s.useEffect.stop()
original.value = 20
dummy === original.value // false
pauseTrack
Pause automatic effect collection, re-enable with enableTrack
.
Example
import { useValue, pauseTrack, enableTrack } from 'gyron'
const original = useValue(0)
pauseTrack()
// Accessing original will not be collected,
// i.e. dependencies not updated
enableTrack()
enableTrack
Enable automatic effect collection, pause with pauseTrack
.
Example
import { useValue, pauseTrack, enableTrack } from 'gyron'
const original = useValue(0)
pauseTrack()
// Accessing original will not be collected,
// i.e. dependencies not updated
enableTrack()
cleanupTrackEffect
Clear data dependencies, useful when accidentally collected.
Example
import { useValue, useEffect, cleanupTrackEffect } from 'gyron'
const original = useValue(0)
let dummy: number
useEffect(() => {
dummy = original.value
})
cleanupTrackEffect(original, 'value')
original.value = 1
dummy === 0 // true
asyncTrackEffect
Manually collect dependencies in async.
Example
const original = useValue(0)
let dummy: number
const useEffect = new ReactiveEffect(
() => {
Promise.resolve().then(() => {
asyncTrackEffect(useEffect)
dummy = original.value
clearTrackEffect()
})
},
() => {
dummy = original.value
}
)
useEffect.run()
await Promise.resolve()
dummy === 0 // true
original.value = 10
dummy === 10 // true
clearTrackEffect
Typically with asyncTrackEffect
, clear side effects caused by it.
toRaw
Access original unproxied data of observed object, useful for complex objects. Unwraps value object in useValue, returns original value.
Parameters
observed
: object - Reactive data.
Return
Original unproxied data, non-reactive.
Type Declaration
declare function toRaw<T>(observed: T): T
Example
import { useValue } from 'gyron'
const original = useValue(0)
let dummy: number
useEffect(() => {
dummy = toRaw(original)
})
dummy === 0 // true
original.count = 1
dummy === 0 // true