【问题标题】:Elm Signals in Vanilla JavaScript?原生 JavaScript 中的榆树信号?
【发布时间】:2016-03-02 17:19:38
【问题描述】:

我知道可以在 vanilla JS 中实现信号/observables/流,因为 Elm 会编译回 JS。

谁能提供一个将信号转换为 JS 的示例?它必须使用回调结构对吗?例如,Elm 将其翻译成什么?

    main =
       Signal.map show Mouse.position

【问题讨论】:

    标签: javascript signals elm


    【解决方案1】:

    以一种非常粗略的方式,您可以认为这相当于:

    document.onmousemove = handleMouseMove;
    
    function handleMouseMove(event) {
        //...extract x and y from event somehow
        show([x, y])
    }
    

    但在 Elm 中发生了更多事情,它更类似于 RXjs 中的可观察对象https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md

    【讨论】:

    • 嗨塞巴斯蒂安,感谢您的回答。我的问题真的更笼统——这些反应式结构(信号、Observables、Streams 等等)是如何在 vanilla JS 中处理的?它们的核心 JavaScript 是什么?我觉得我所见过的任何描述都缺少这一点,而且它们感觉就像魔法一样。
    • 您的问题过于宽泛,无法在 StackOverflow 上简明扼要地回答。我认为 Sebastian 给出了关于如何推理 Elm 的最佳答案,但如果你真的想了解 Elm 运行时,那么这里是作者 Evan Czaplicki 为他的论文写的论文seas.harvard.edu/sites/default/files/files/archived/…
    【解决方案2】:

    你放的简单代码在 JS 中并没有转化为简单的回调结构。 Elm 运行时比这要复杂一些。不过,如果你真的想深入了解,可以看看Native implementation of Signal

    【讨论】:

    • 这是否意味着在纯 JavaScript 中没有像 Signals、Observables、Streams 等反应性结构的直接心智模型?这些结构在本质上都是复杂的,在香草 JS 中缺乏类似物吗?换句话说,看看你链接到的本机实现,这段代码的哪些部分是使信号框架成为可能的绝对必要的部分?
    • 这是基本的可观察模式。信号是随时间变化的值。这意味着您需要维护一个观察者列表,并在值更改时通知他们。也许这会有所帮助:carldanley.com/js-observer-pattern
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多