nexa-reactivity 0.7.1 → 0.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core.d.ts +1 -0
- package/dist/core.js +32 -0
- package/package.json +1 -1
package/dist/core.d.ts
CHANGED
|
@@ -31,3 +31,4 @@ export interface Signal<T = any> {
|
|
|
31
31
|
export declare function signal<T>(value: T, label?: string): Signal<T>;
|
|
32
32
|
export declare function computed<T>(fn: () => T): Signal<T>;
|
|
33
33
|
export declare function setPostFlushCallback(cb: () => void): void;
|
|
34
|
+
export declare function memo<T>(fn: () => T): Signal<T>;
|
package/dist/core.js
CHANGED
|
@@ -208,3 +208,35 @@ export function computed(fn) {
|
|
|
208
208
|
export function setPostFlushCallback(cb) {
|
|
209
209
|
state.postFlushCallback = cb;
|
|
210
210
|
}
|
|
211
|
+
export function memo(fn) {
|
|
212
|
+
let cachedValue;
|
|
213
|
+
let dirty = true;
|
|
214
|
+
const runner = new Effect(fn, () => {
|
|
215
|
+
if (!dirty) {
|
|
216
|
+
dirty = true;
|
|
217
|
+
trigger(wrapper, 'value');
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
runner.priority = 50;
|
|
221
|
+
runner.run();
|
|
222
|
+
cachedValue = runner.run();
|
|
223
|
+
dirty = false;
|
|
224
|
+
const wrapper = {
|
|
225
|
+
get value() {
|
|
226
|
+
track(wrapper, 'value');
|
|
227
|
+
if (dirty) {
|
|
228
|
+
cachedValue = runner.run();
|
|
229
|
+
dirty = false;
|
|
230
|
+
}
|
|
231
|
+
return cachedValue;
|
|
232
|
+
},
|
|
233
|
+
peek() {
|
|
234
|
+
if (dirty) {
|
|
235
|
+
cachedValue = runner.run();
|
|
236
|
+
dirty = false;
|
|
237
|
+
}
|
|
238
|
+
return cachedValue;
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
return wrapper;
|
|
242
|
+
}
|