Fre:又一个小而美的前端MVVM框架

halo,人人好,良久不贱呢!

近来由于看了一些 be 的小说,整个人都比较致郁::>_<::

就在昨天,我用了一天的时候写了 fre,又一个小而美的前端MVMM框架

可以你以为,有了 vue 和 react,没必要再写一个了::>_<::我以为我照样想一想方法寻觅一下它的存在感吧

先看 API:

import { useState, html, mount } from 'fre'

function counter() {
  const state = useState({
    count: 0
  })

  return html`
    <div>
      <p>${state.count}</p>
      <button onclick=${() => {state.count++}}>+</button>
      <button onclick=${() => {state.count--}}>-</button>
    </div> 
  `
}

mount(html`<${counter}/>`, document.body)

hooks style 的组件化计划

最早看到的应当是 hooks。

虽然和 react 的 hooks 并不一样,fre 的 hooks 是经由过程 Proxy 挟制完成的,react 是经由过程两个数组对应完成的。

没错,fre 就是由于有了 hooks 才写的,hooks 使得 function 具有了状况,实际上是另一种组件化计划。

市面上罕见的组件化计划:

react 的计划,class + extend + hoc + render props,依托 JSX
vue 的计划,模板引擎,依托 vue-loader
angular 的计划,(我也不知道是啥,没研讨,然则应当可以将 web-components 归类到这里)
以上,可以说,各大框架完成组件化的体式格局各不相同,react 和 vue 都须要 babel,而 web-components 虽然浏览器原生支撑,然则它自带的范围也许多(如 scoped css,直接褫夺了 css 复用的才能)

所以 fre 吸收优点,运用了新的计划:

fre 的计划,function + tagged template +JSX(可选)

没错,虽然换了个英文名,然则它就是 ES6 原生支撑的 模板字符串 (⊙o⊙)…

tagged template 的模板计划

我一直在寻觅可以运转于浏览器的某种写法,web-components 已否了,tagged template 是最好的挑选

没想到,tagged template 不单单议可以靠近 JSX 的开辟体验,另有许多欣喜:

html 规范,如<div class=container>这类简写,总之种种的 html5 的写法都是可以的
断绝 js,经由过程两个反引号,就再也不必忧郁 calss 和 className
固然,它最主要的照样,无需编译

浏览器直接运转会有什么优点呢?

它可以让后端言语和jq一样来运用 fre,却具有了组件化、相应式数据驱动dom
我曾说过,人人都在写前端框架,种种的 react-like、vue-like,迷你化、先进化……

然则没法处理痛点。

前端框架的痛点实在许多,比方SSR

SSR 许多限定,并非 webpack 设置多贫苦,而是它的限定丧失了许多可以。

首当其冲就是使得除 node 之外的言语仅凭本身的才能没法同构。

所以我写 fre,从某个角度上,也是为了其他后端言语。

Proxy 和 vdom diff 的数据更新计划

这个议题也被议论良久啦,也就是数据更新的计划,一般也有许多种

angular ,脏搜检(没研讨,不晓得究竟是 ng1 照样 ng2)
vue ,对象挟制+vdom diff,vue2 Object.defineproperty
react,vdom diff
san,set(xxx,xxx)
我个人,由于就比较专注 vue 和 react,所以也比较引荐对象挟制+vdom diff 的

所以 fre 也是云云,经由过程 Proxy 完成的挟制,挟制会触发 rerender,举行 vdom diff

这块内容,只能说个人喜好,种种计划都可以,看作者个人吧

这里趁便一提 diff

实在 diff 算法完成蛮多的,大抵有两种:

react 主导的,两套 vdom 举行比对,天生 patches,打到实在 dom 上
preact 主导的,一套 vdom 直接和 实在dom 比对,直接操纵 实在 dom
fre 挑选的是前者,由于 有了 proxy,实在 vdom 无足轻重,充其量只是一层笼统罢了,那既然笼统它,就应当和 react 一样抽的彻底点,以后对 diff 的优化,就只是两个对象的事儿了

呼~望天,写了这么多::>_<::

末了放上 github 地点,迎接试用 与 star!

https://github.com/132yse/fre

    原文作者:吸管君
    原文地址: https://segmentfault.com/a/1190000017392963
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞