-
Hello, I'm having a problem with The Memo version has resource outside Suspense warning when I attempt to access visitor in compute_mode(). #[component]
pub fn ContractViewA() -> impl IntoView {
let visitor: Resource<Visitor> = expect_context();
let (req_mode, set_mode) = signal::<Option<&'static str>>(None);
let real_mode = Memo::new(move |_| compute_mode(req_mode.get(), visitor));
view! {
<Suspense>
<p>
<button on:click={move |_| set_mode.set(None)}>"Nav"</button>
<button on:click={move |_| set_mode.set(Some("edit"))}>"Edit"</button>
<button on:click={move |_| set_mode.set(Some("view"))}>"View"</button>
</p>
<p>{ move || real_mode.get() }</p>
</Suspense>
}
} The closure version emits no warnings. #[component]
pub fn ContractViewB() -> impl IntoView {
let visitor: Resource<Visitor> = expect_context();
let (req_mode, set_mode) = signal::<Option<&'static str>>(None);
let real_mode = move || compute_mode(req_mode.get(), visitor);
view! {
<Suspense>
<p>
<button on:click={move |_| set_mode.set(None)}>"Nav"</button>
<button on:click={move |_| set_mode.set(Some("edit"))}>"Edit"</button>
<button on:click={move |_| set_mode.set(Some("view"))}>"View"</button>
</p>
<p>{ move || real_mode() }</p>
</Suspense>
}
} Both versions appear to work in that the paragraph text updates so I guess this could be a false warning? -- but more likely I'm doing something wrong or misunderstanding something. I also apologize if this was asked before (it seems like it should have been), I've searched several times but found nothing that seems related. Suggestions? Thanks! |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment
-
Ah-ha! of course I find it after posting, but I've found an explanation here: #3638 (comment)
And indeed, the following works without emitting any warnings. #[component]
pub fn ContractViewC() -> impl IntoView {
let visitor: Resource<Visitor> = expect_context();
let (req_mode, set_mode) = signal::<Option<&'static str>>(None);
view! {
<Suspense>
<p>
<button on:click={move |_| set_mode.set(None)}>"Nav"</button>
<button on:click={move |_| set_mode.set(Some("edit"))}>"Edit"</button>
<button on:click={move |_| set_mode.set(Some("view"))}>"View"</button>
</p>
<p>{ let real_mode = Memo::new(move |_| compute_mode(req_mode.get(), visitor)); move || real_mode.get() }</p>
</Suspense>
}
} So, I guess it is a false positive warning. |
Beta Was this translation helpful? Give feedback.
Ah-ha! of course I find it after posting, but I've found an explanation here: #3638 (comment)
And indeed, the following works without emitting any warnings.