< 返回版块

jasper2007111 发表于 2023-09-02 22:47

Tags:Yew

我在使用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`

评论区

写评论
作者 jasper2007111 2023-09-03 11:30

多谢,一语道破,看来这个框架这么用还是有问题。

--
👇
苦瓜小仔: impl<IN, OUT, F: Fn(IN) -> OUT + 'static> From<F> for Callback<IN, OUT> 引入了闭包必须满足 'static,所以捕获非 'static 的类型是不可能的。

作者 jasper2007111 2023-09-03 11:27

最上面的是框架给的,我在里面包装好像不行,下面人回答需要'static类型,看来只能想想其他的实现了。

--
👇
asuper: 这框架我不熟悉,如果props必须是引用的话,可以考虑用Arc或Weak包装

asuper 2023-09-03 06:56

这框架我不熟悉,如果props必须是引用的话,可以考虑用Arc或Weak包装

苦瓜小仔 2023-09-03 00:29

impl<IN, OUT, F: Fn(IN) -> OUT + 'static> From<F> for Callback<IN, OUT> 引入了闭包必须满足 'static,所以捕获非 'static 的类型是不可能的。

1 共 4 条评论, 1 页