pepr
pepr
SSolidJS
Created by pepr on 12/30/2024 in #support
Child Component not Re-rendering
So I have this code
import { createEffect, createSignal, onCleanup, Show } from "solid-js";
import { invoke } from "@tauri-apps/api/core";
import Weapon from "./weapon/Weapon";

function Weapons() {
const [playerInventory, setPlayerInventory] = createSignal<any>(null);

let intervalId: any;

createEffect(async () => {
intervalId = setInterval(async () => {
const response: any = await invoke("send", { message: "get_player_inventory" });
setPlayerInventory(response.player_inventory);
}, 500);
});

onCleanup(() => clearInterval(intervalId));

const handleWeaponChange = async (weapon: any) => {
setPlayerInventory({ ...playerInventory(), weapon: weapon });
await invoke("send", { message: { set_player_inventory: playerInventory() } });
}

return (
<Show when={playerInventory() != null}>
<main id="weapons-container">
<Weapon weapon_={playerInventory().weapon} on_change={handleWeaponChange}></Weapon>
</main>
</Show>
);
}

export default Weapons;
import { createEffect, createSignal, onCleanup, Show } from "solid-js";
import { invoke } from "@tauri-apps/api/core";
import Weapon from "./weapon/Weapon";

function Weapons() {
const [playerInventory, setPlayerInventory] = createSignal<any>(null);

let intervalId: any;

createEffect(async () => {
intervalId = setInterval(async () => {
const response: any = await invoke("send", { message: "get_player_inventory" });
setPlayerInventory(response.player_inventory);
}, 500);
});

onCleanup(() => clearInterval(intervalId));

const handleWeaponChange = async (weapon: any) => {
setPlayerInventory({ ...playerInventory(), weapon: weapon });
await invoke("send", { message: { set_player_inventory: playerInventory() } });
}

return (
<Show when={playerInventory() != null}>
<main id="weapons-container">
<Weapon weapon_={playerInventory().weapon} on_change={handleWeaponChange}></Weapon>
</main>
</Show>
);
}

export default Weapons;
When player inventory is set via the interval (note that it's state does change) the weapon component doesn't re-render. I've tried a lot of things and can't get it to.
10 replies