我正在使用Dioxus构建一个UI.该UI在很大程度上依赖于来自第三方库的 struct .此 struct 不实现克隆.按下按钮时需要修改 struct .请考虑这个简化的示例:
use dioxus::prelude::*;
struct ThirdPartyStruct(i64);
impl ThirdPartyStruct {
fn add_one(&mut self) {
self.0 += 1;
}
}
fn app(cx: Scope) -> Element {
let third_party_struct = use_state(cx, || ThirdPartyStruct(0));
cx.render(rsx! {
button {
onclick: move |_| third_party_struct.make_mut().add_one(),
"Click me!"
}
p {
"{third_party_struct.get().0}"
}
})
}
这不能编译,因为make_mut
需要为ThirdPartyStruct
实现克隆.真实的ThirdPartyStruct
并非如此简单,必须使用真实的add_one
(所以像"使用+ 1
代替"这样的解决方案是无效的).手工实现克隆也是不可行的.
我try 了很多方法,包括用于修改包含的 struct 的UseState
struct 的大多数方法.它们要么都需要按值修改 struct (比如调用+ 1
而不是+= 1
),要么需要实现克隆.