Skip to content

Commit 3fc015c

Browse files
committed
track length in array helpers, fix mobx external source
1 parent 424a31a commit 3fc015c

File tree

2 files changed

+12
-6
lines changed

2 files changed

+12
-6
lines changed

.changeset/eighty-grapes-sell.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"solid-js": patch
3+
---
4+
5+
track length in array helpers, fix mobx external source

packages/solid/src/reactive/array.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,12 @@ export function mapArray<T, U>(
5959
onCleanup(() => dispose(disposers));
6060
return () => {
6161
let newItems = list() || [],
62+
newLen = newItems.length,
6263
i: number,
6364
j: number;
6465
(newItems as any)[$TRACK]; // top level tracking
6566
return untrack(() => {
66-
let newLen = newItems.length,
67-
newIndices: Map<T | typeof FALLBACK, number>,
67+
let newIndices: Map<T | typeof FALLBACK, number>,
6868
newIndicesNext: number[],
6969
temp: U[],
7070
tempdisposers: (() => void)[],
@@ -196,10 +196,11 @@ export function indexArray<T, U>(
196196

197197
onCleanup(() => dispose(disposers));
198198
return () => {
199-
const newItems = list() || [];
199+
const newItems = list() || [],
200+
newLen = newItems.length;
200201
(newItems as any)[$TRACK]; // top level tracking
201202
return untrack(() => {
202-
if (newItems.length === 0) {
203+
if (newLen === 0) {
203204
if (len !== 0) {
204205
dispose(disposers);
205206
disposers = [];
@@ -226,7 +227,7 @@ export function indexArray<T, U>(
226227
len = 0;
227228
}
228229

229-
for (i = 0; i < newItems.length; i++) {
230+
for (i = 0; i < newLen; i++) {
230231
if (i < items.length && items[i] !== newItems[i]) {
231232
signals[i](() => newItems[i]);
232233
} else if (i >= items.length) {
@@ -236,7 +237,7 @@ export function indexArray<T, U>(
236237
for (; i < items.length; i++) {
237238
disposers[i]();
238239
}
239-
len = signals.length = disposers.length = newItems.length;
240+
len = signals.length = disposers.length = newLen;
240241
items = newItems.slice(0);
241242
return (mapped = mapped.slice(0, len));
242243
});

0 commit comments

Comments
 (0)