有没有一种方便的方法来引用 Svelte 组件中的 DOM 元素?

Posted

技术标签:

【中文标题】有没有一种方便的方法来引用 Svelte 组件中的 DOM 元素?【英文标题】:Is there a convenient way to reference a DOM element in Svelte components? 【发布时间】:2020-02-10 05:44:14 【问题描述】:

我习惯于像 React 或 Angular 这样的库/框架,它们都有方便的方法来访问属于逻辑组件的实际 DOM 元素。 React 具有 createRef 实用程序,而 Angular 具有与例如模板变量相结合的其他功能。 @ViewChild

这些引用不仅使访问 DOM 变得容易,而无需每次都明确地查询元素,它们还与 DOM 保持同步,以便它们始终保持对当前元素的引用。我刚开始为我的宠物项目使用 Svelte,但尽管我浏览了 Svelte 的文档和谷歌很多,但在概念和用法上我没有发现任何类似的东西。我想这可能与 Svelte 的无运行时概念有关,但仍然不知道为什么没有这样的实用程序。

那么问题是,Svelte 中是否有类似的实用程序?

【问题讨论】:

@skyboyer 我认为您粘贴了错误的 URL。我猜应该是这个:svelte.dev/tutorial/bind-this 是的,这正是我想要的。谢谢你们! 我认为use:action 是你所追求的svelte.dev/docs#use_action 【参考方案1】:

基于https://svelte.dev/tutorial/bind-this 中的示例(感谢@skyboyer),您可以使用bind:this (try in REPL):

<script>
    import  onMount  from 'svelte';

    let myInput;

    onMount(() => 
        myInput.value = 'Hello world!';
    );
</script>

<input type="text" bind:this=myInput/>

您也可以使用use:action,如https://svelte.dev/docs#use_action 所见并由@collardeau (try in REPL) 建议:

<script>
    import  onMount  from 'svelte';

    let myInput;

    function MyInput (node) 
        myInput = node;
        myInput.value = 'Hello world!';
    
</script>

<input type="text" use:MyInput/>

【讨论】:

@SuperUberDuper 没错,但是通过使用 Svelte 的绑定(特别是当您不需要访问 DOM 元素,只需访问值,例如 bind:value=myInputValue),您将获得双向值更改,而无需必须自己实现它们。编译器会为您保证它们是最新的。 两者都很漂亮;)

以上是关于有没有一种方便的方法来引用 Svelte 组件中的 DOM 元素?的主要内容,如果未能解决你的问题,请参考以下文章

Svelte入门——Web Components实现跨框架组件复用

Svelte入门——Web Components实现跨框架组件复用

如何将 Svelte 应用程序用作另一个 Svelte 应用程序中的组件?

有没有一种方便的方法来过滤一系列 C# 8.0 可空引用,只保留非空值?

是否有记录 Svelte 组件的标准方法?

尝试让 nedb 导入 Svelte 组件