Fix SolidJS proxy error in batched WebSocket updates
Using reconcile() inside produce() is invalid - reconcile returns a function that creates a new proxy, but produce expects direct mutations. Use batch() from solid-js instead to atomically batch the two setState calls without proxy conflicts.
This commit is contained in:
parent
8bc8a98bb8
commit
fbabace023
1 changed files with 5 additions and 7 deletions
|
|
@ -1,4 +1,4 @@
|
|||
import { createSignal, onCleanup } from 'solid-js';
|
||||
import { createSignal, onCleanup, batch } from 'solid-js';
|
||||
import { createStore, produce, reconcile } from 'solid-js/store';
|
||||
import type {
|
||||
State,
|
||||
|
|
@ -472,12 +472,10 @@ export function createWebSocketStore(url: string) {
|
|||
// Apply updates - batch together if both are present to prevent flapping
|
||||
if (shouldApplyDockerHosts && processedHosts !== null) {
|
||||
// Both dockerHosts and hosts in this message - batch them atomically
|
||||
setState(
|
||||
produce((s: State) => {
|
||||
s.dockerHosts = reconcile(processedDockerHosts!, { key: 'id' })(s.dockerHosts);
|
||||
s.hosts = reconcile(processedHosts!, { key: 'id' })(s.hosts);
|
||||
})
|
||||
);
|
||||
batch(() => {
|
||||
setState('dockerHosts', reconcile(processedDockerHosts!, { key: 'id' }));
|
||||
setState('hosts', reconcile(processedHosts!, { key: 'id' }));
|
||||
});
|
||||
|
||||
// Lifecycle cleanup for Docker hosts and containers
|
||||
const hostIds = new Set(processedDockerHosts!.map((h: DockerHost) => h.id).filter(Boolean));
|
||||
|
|
|
|||
Loading…
Reference in a new issue