我在使用Yew这个框架,遇到在闭包中使用了props这个引用,提示我这个引用只能在函数中使用。
#[function_component]
pub fn YELInputNumber(props: &YELInputNumberProps) -> Html {
let on_decrease = {
let value = props.value.clone();
Callback::from(move|e| {
let v = decrease(props, value);
log!(v);
})
};
let on_increase = { Callback::from(|e| {}) };
html! {
<div class={get_div_classes(props)}>
if props.controls {
<span
class="el-input-number__decrease"
role="button"
onclick={on_decrease}
>
<i class={format!("el-icon-{}", {
if get_controls_at_right(props) {
"arrow-down"
} else {
"minus"
}
})}></i>
</span>
<span
class="el-input-number__increase"
role="button"
onclick={on_increase}
>
<i class={format!("el-icon-{}", {
if get_controls_at_right(props) {
"arrow-down"
} else {
"plus"
}
})}></i>
</span>
}
</div>
}
}
fn decrease(props: &YELInputNumberProps, val: f64) -> f64 {
let precision_factor = js_sys::Math::pow(10.0, get_num_precision(props));
let num = precision_factor * val - precision_factor * props.step as f64;
return to_precision(props, num, None);
}
报如下的错误:
36 | pub fn YELInputNumber(props: &YELInputNumberProps) -> Html {
| ----- - let's call the lifetime of this reference `'1`
| |
| `props` is a reference that is only valid in the function body
...
40 | / Callback::from(move|e| {
41 | | let v = decrease(props, value);
42 | | log!(v);
43 | | })
| | ^
| | |
| |__________`props` escapes the function body here
| argument requires that `'1` must outlive `'static`
1
共 4 条评论, 1 页
评论区
写评论多谢,一语道破,看来这个框架这么用还是有问题。
--
👇
苦瓜小仔:
impl<IN, OUT, F: Fn(IN) -> OUT + 'static> From<F> for Callback<IN, OUT>
引入了闭包必须满足 'static,所以捕获非 'static 的类型是不可能的。最上面的是框架给的,我在里面包装好像不行,下面人回答需要'static类型,看来只能想想其他的实现了。
--
👇
asuper: 这框架我不熟悉,如果props必须是引用的话,可以考虑用Arc或Weak包装
这框架我不熟悉,如果props必须是引用的话,可以考虑用Arc或Weak包装
impl<IN, OUT, F: Fn(IN) -> OUT + 'static> From<F> for Callback<IN, OUT>
引入了闭包必须满足 'static,所以捕获非 'static 的类型是不可能的。