能否在Leptos的Context中存储NodeRef?
问题解答
这不是框架bug,是你对Leptos中NodeRef的使用方式理解有误。
在Leptos里,node_ref属性接收的是一个函数,而非直接传入NodeRef实例。正确写法需要把NodeRef的set方法传入,框架会通过这个方法将DOM节点赋值给你的NodeRef。
错误代码:
<input type="text" node_ref=my_ctx2.input_ref />
正确写法(两种方式可选):
// 显式闭包写法 <input type="text" node_ref=|node| my_ctx2.input_ref.set(node) />
// 简化写法,直接传递set方法 <input type="text" node_ref=my_ctx2.input_ref.set />
原因说明:Leptos的node_ref属性期望一个Fn(Option<Node>)类型的参数,用来接收DOM节点引用。直接传入NodeRef实例时,框架会尝试将其当作函数调用,但NodeRef本身并非函数,因此会抛出“方法需要1个参数但传入0个”的错误。
另外要确保Context中的input_ref是正确初始化的NodeRef<HtmlInputElement>实例,示例如下:
#[derive(Clone, Debug)] struct MyContext { input_ref: NodeRef<HtmlInputElement>, } // 创建Context时初始化NodeRef let my_ctx = MyContext { input_ref: NodeRef::new(), };
内容的提问来源于stack exchange,提问作者Dinaiscoding
相关产品推荐
相关产品推荐

