pepr
Child Component not Re-rendering
So I have this code
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.
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;
10 replies