riot.js教程【一】简介

题记

这是一个系列文章的第一篇

如果关注riot.js的人,可以关注我的博客;

我接下来会持续不断的发这一块的文章;

系列文章内容大多来自官网翻译; 

Riotjs简介

Riotjs是一款简单的、优雅的、组件化UI前端开发框架;

他支持自定义标签(custom tags),拥有令人愉悦的语法,优雅的API和非常小的体积;

为什么需要一个新的界面库

前端开发框架的确已经非常多了,但还是没有令人足够满意的东西,reactjs貌似是来解决问题的,但是用过的人都知道,它有很多令人不爽的弱点,我们相信Riotjs找到了解决问题的那个微妙的平衡点,足以让开发者愉悦的用他解决界面问题;

自定义标签(custom tags)

Riotjs为所有浏览器带来了自定义标签


<todo>

  <!-- layout -->

  <h3>{ opts.title }</h3>

  <ul>

    <li each={ item, i in items }>{ item }</li>

  </ul>

  <form onsubmit={ add }>

    <input ref="input">

    <button>Add #{ items.length + 1 }</button>

  </form>

 

  <!-- style -->

  <style>

    h3 {

      font-size: 14px;

    }

  </style>

 

  <!-- logic -->

  <script>

    this.items = []

 

    add(e) {

      e.preventDefault()

      var input = this.refs.input

      this.items.push(input.value)

      input.value = ''

    }

  </script>

 

</todo>

自定义标签把HTML和JS组合在一起,使之成为一个可复用的UI组件;

如你所见,riotjs有令人愉悦的语法和平缓的学习曲线;这是reactjs和polymer不能比的;

可读性

你可以使用自定义标签创建复杂的用户界面

来看看下面这个界面(如果你用传统的写法,会写成什么样呢?)


<body>

 

  <h1>Acme community</h1>

 

  <forum-header/>

 

  <div class="content">

    <forum-threads/>

    <forum-sidebar/>

  </div>

 

  <forum-footer/>

 

  <script>riot.mount('*', { api: forum_api })</script>

</body>

Html语法是用来创建用户界面的;

他具备可嵌套的标签和标签属性;

这为自定义标签提供了基础支撑;

Riotjs先把Riotjs标签解析成纯JS,再在浏览器内执行;

DOM绑定

最少的DOM更新

单向数据流:无论是更新还是卸载,都是从父组件传递给子组件

为了更高的性能,riotjs会预编译表达式,缓存表达式结果;

为了更好的可控性,riotjs提供了很多自定义标签的生命周期事件;

支持服务端渲染

贴近标准

没有专有的事件系统

不需要额外的附加库

编译渲染出来的DOM可以被其他库自由的操纵;

不需要特别的HTML根标签

DOM标签上不需要data-属性

可以和jquery很好的兼容

工具链友好

可以使用ES6,TypeScript,CoffeeScript,Jade,LiveScript等工具创建标签;

可以使用NPM,CommonJS,AMD,Bower,Component等工具整合项目;

可以使用Gulp,Browserify,Grunt等工具进行开发;

极简原则

极简原则使得riotjs不同于其他的类库

易用的语法

Riotjs的主要设计目标就是创建一套极简的标签撰写语法;

便捷的简写形式: class={ enabled: is_enabled, hidden: hasErrors() }

不用关心render, state, constructor

内联表达式: Add #{ items.length + 1 } or class="item { selected: flag }"

不一定非得吧逻辑代码放到<script>标签内

ES6语法支持

平缓的学习曲线

Riotjs的API数量是同类js库的1/10或者1/100

不需要花大力气去学习

更少的专有的东西,更多的标准的东西;

体积非常小

polymer.html: 49.38KB (gzip)

react.min.js: 34.89KB (gzip)

riot.min.js:10.38KB (gzip)

更少的BUG

下载压力更小,解析速度更快

可嵌入的,库的体积应该比应用程序的体积小才对

维护成本比较低,riot不需要一个非常庞大的团队来维护他

麻雀虽小,五脏俱全

Riotjs拥有所有必要的模块:

响应式界面编程所必须的模块;

为独立的模块编写API所必须的事件库;

控制URL前进后退功能所必须路由模块

总结

Riot是普适性的WEB UI组件化解决方案,它就像React和Polymer的组合,并且它不会导致代码爆炸;你可以凭你的直觉使用它;他体积很小,几近于无;它并不是重新发明的轮子,他是采各家之长,并把事情做到极简,极好;

我们应该关注组件,而不是关注模版;

把有关联的逻辑和展现放到一起,做成一个组件;这样我们整个系统都会变的更加清晰;

 

 

时间: 2024-09-28 22:14:59

riot.js教程【一】简介的相关文章

riot.js教程【三】访问DOM元素、使用jquery、mount输入参数、riotjs标签的生命周期

前文回顾riot.js教程[二]组件撰写准则.预处理器.标签样式和装配方法:riot.js教程[一]简介: 访问DOM元素 你可以通过this.refs对象访问dom元素 而且还有大量的属性简写方式可以使用 比如:if="{...}",(有时候你需要对这些东西做一些特殊的处理才能用) 使用Jquery 如果你想在riot标签内部访问dom元素 你可能需要了解一下riot标签生命周期相关的知识 你会注意到,mount方法还没执行的时候,dom元素是不会被创建的 这就意味着,mount方法

riot.js教程【五】标签嵌套、命名元素、事件、标签条件

前文回顾riot.js教程[四]Mixins.HTML内嵌表达式riot.js教程[三]访问DOM元素.使用jquery.mount输入参数.riotjs标签的生命周期:riot.js教程[二]组件撰写准则.预处理器.标签样式和装配方法:riot.js教程[一]简介: 标签嵌套 让我们定义一个父标签account,一个子标签subscription <account> <subscription plan={ opts.plan } show_details="true&quo

riot.js教程【四】Mixins、HTML内嵌表达式

前文回顾riot.js教程[三]访问DOM元素.使用jquery.mount输入参数.riotjs标签的生命周期:riot.js教程[二]组件撰写准则.预处理器.标签样式和装配方法:riot.js教程[一]简介: 共享Mixins 混合开发可以使你很好的复用代码,如下所示: var OptsMixin = { // the `opts` argument is the option object received by the tag as well init: function(opts) {

riot.js教程【六】循环、HTML元素标签

前文回顾riot.js教程[五]标签嵌套.命名元素.事件.标签条件riot.js教程[四]Mixins.HTML内嵌表达式riot.js教程[三]访问DOM元素.使用jquery.mount输入参数.riotjs标签的生命周期:riot.js教程[二]组件撰写准则.预处理器.标签样式和装配方法:riot.js教程[一]简介: 循环 可以通过each属性来达到标签循环,如下: <todo> <ul> <li each={ items } class={ completed: d

Vue.js教程之计算属性_javascript技巧

Vue.js 的内联表达式非常方便,但它最合适的使用场景是简单的布尔操作或字符串拼接.如果涉及更复杂的逻辑,你应该使用计算属性. 计算属性是用来声明式的描述一个值依赖了其它的值.当你在模板里把数据绑定到一个计算属性上时,Vue 会在其依赖的任何值导致该计算属性改变时更新 DOM.这个功能非常强大,它可以让你的代码更加声明式.数据驱动并且易于维护. 通常情况下,使用计算属性会比使用过程式的$watch回调更合适.比如下面的例子: <div id="demo">{{fullNa

支持移动端和PC端的轻量级轮播图插件&amp;amp;&amp;amp;hammer.js教程

http://www.swiper.com.cn/ 下载:http://download.csdn.net/detail/cometwo/9407912 原文地址:http://www.cnblogs.com/iamlilinfeng/p/4239957.html 1. Pan事件:在指定的dom区域内,一个手指放下并移动事件,即触屏中的拖动事件.这个事件在屏触开发中比较常用,如:左拖动.右拖动等,如手要上使用QQ时向右滑动出现功能菜单的效果.该事件还可以分别对以下事件进行监听并处理: Pans

Three.js 教程和示例(Tutorials and Examples)

Three.js 教程和示例(Tutorials and Examples) 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 摘录以下部分进行翻译: Tutorials and Examples

高手推荐一套js教程

问题描述 那个高人,给偶推荐一套js教程,让俺也提高一下,非常感谢!!!!!!!!! 解决方案 解决方案二:速成的那就学jQuery,很简单啦解决方案三:jquery,dwr,json玩java差不多就这些吧.网上有很多资料的,搜搜就好了.解决方案四:<javascript权威指南〉byDavidFlanagan中国电力出版社解决方案五:百度文库很多啊!

js教程:JavaScript For...In 方法及实例教程

js教程:JavaScript For...In 方法及实例教程 在为...在一份声明中是用来循环(重复)通过要素的一个数组,或通过性能的一个对象. 范例 对于在声明中... 如何使用的...在一份声明中循环的要素一个数组. <html> <body> <script type="text/javascript"> var x; var mycars = new Array(); mycars[0] = "Saab"; mycar