No estoy seguro si he reproducido correctamente mi problema, pero aquí está:
En la señal de renderizado, tengo algún tipo de creación de objetos que conduce a más efectos de creación que dependen de la señal de actualización. Pero de alguna manera, el alcance se desecha y solo se dispara una vez en el momento de la creación. Aunque tengo referencias a estos objetos, ¿cómo puedo asegurarme de que createEffect anidado siga activándose?
import { render } from 'solid-js/web'; import { on, createSignal, createEffect } from 'solid-js' function HelloWorld() { let [render, setRender] = createSignal(undefined, { equals: false }) let [update, setUpdate] = createSignal(undefined, { equals: false }) let i = 0 createEffect(on(render, () => { if (i++ === 1) { createEffect(on(update, () => { console.log('inside') })) } })) createEffect(on(update, () => { console.log('regular', i) })) setInterval(() => { setUpdate(); setRender(); }) return <div>Hello World!</div>; } render(() => <HelloWorld />, document.getElementById('app')) Quiero registros regular e inside en cada intervalo.
Puede usar createRoot para sobrescribir la raíz del createEffect anidado. De lo contrario, se eliminará en cada repetición del efecto "padre".
createEffect(() => { createRoot(dispose => { // effect will be disposed only when // the dispose() fn get's called createEffect(() => {...}) }) })https://playground.solidjs.com/?hash=-999371052&version=1.3.13