科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件JavaScript库Reactor.js有哪些特点

JavaScript库Reactor.js有哪些特点

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

一个轻量级的JavaScript库:Reactor.js, 一个signal需要依赖于其它signal中的数值来确定自己的值。同样,一个observer函数也是依赖signal来确定下一步要做的事情。

来源:CSDN 2013年5月20日

关键字: JavaScript Reactor.js

  • 评论
  • 分享微博
  • 分享邮件

ZDNet至顶网软件频道 下面是一个简单的例子:

通过上面的例子,可以看出Reactor具有以下三大特点:

概述

Reactor由两大组件组成:Signals和Observers。

一个signal需要依赖于其它signal中的数值来确定自己的值。同样,一个observer函数也是依赖signal来确定下一步要做的事情。

当一个signal更新时,它会自动更新所有相关的signals和observers。这时,在整个应用程序中,signals和observers形成一个传递曲线图。signals是传递曲线图的内在因素,而observers则是外在因素。

下面是一个使用Reactor的例子。

Reactor中使用Signals和Observer函数只需很小的内存,就能轻易的操作相应的变量、代码块、交换读取和调用响应的函数。

与其它的库比较

正如Bacon.js和Knockout.js一样,Reactor库也是基于相同reactive的原则。不同之处是Reactor始终保持着轻量级,后添加的语法和模板都保持在最小状态。Reactor库还设置了自动更新功能,这就不需要专门设置监听器(反馈系统)。

Signals

Signal是个依赖于其它Signals中的数值。

Reactor提供了一个称为Signal的全局函数。提供一个数值作为返回Signal对象。

实现Signal 对象函数功能。读取signal中的值,这个没有任何形参。

改变Signal中的数值,传递一个新的参数。

Signal可以取任何类型的值,如:数值型、字符串型、布尔型、数组型、对象型。

如果提供Signal的是函数,则返回函数的值来替代原来的函数。

Signals自身的数值可依赖于其他的Signals的函数调用。如果不同的Signal中的数值读取同一给定的函数,那么这些Signal将自动的被设置为依赖关系。这就意味着依赖关系更新,那么被依赖Signals的数值也会更新。

值得注意的是,这里没有声明任何的监听器或者追踪绑定。Reactor能自动的找到具有依赖关系的signal函数定义。

自动更新使signals链接在一起形成更多复杂依赖关系的曲线图。

signals应尽可能的设置为只读,这样可避免任何外界干扰,否则将出现下列问题:

在复杂的曲线图中,尤其是函数传递结束之前,数值的改变极可能引起级联反应,导致一些依赖于signals的定义不停被中断。

上述的例子中,更新fistName会引起fullName和barbarianName两个函数同时更新。这将导致comicTitle被更新两次。

然而,如果comcTitle定义允许写磁盘,将会引发一些问题。因为comicTitle更新两次,将进行两次不同的写磁盘。在没有完成函数传递结束之前,第一次写磁盘会发生错误。

observers函数可以解决上述问题。

Observers

Observers与Signals比起来,主要有3方面的差别:

observers是用于外部响应的,而signals适用于内部状态。在所有signals没有更新完前,signal可能进行多次追踪。如果signals用于外界响应,引起的触发是错误的、冗余的。observers则在所有函数调用后才追踪,并且仅更新一次。这样就不会出现上述问题。
observers的创建与signals的途径是相同的:

如同Signals,当相应的Signals更新后,具有依赖关系的observers也进行自动计算和触发的。

如同Signals,Observer函数功能也被更新。

不允许observer传递空值。

Working with Arrays and Objects

当更新arrays和objects时,可使用Reactor中的convenience方法直接代替更新objects。可以这样使用,如下所示:

如果signal拥有自己的array的值,直接更新该array将不更新有关signal的依赖。这是因为signal对象仍然是自己,经检测没有发生任何变化。反而,使用提供convenience方法更新array,则会检测出有变化。

总 结

如果你喜欢使用CoffeeScript,Reactor变得更为简单!

 

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章