Fre (发音/fri:/
, like free) 是一个小而美的前端框架,实现了 Concurrent 和 Suspense
特性:
安装
yarn add fre -S
使用
import { render, h, useState } from 'fre' function Counter() { const [count, setCount] = useState(0) return ( <div> <h1>{count}</h1> <button onClick={() => setCount(count + 1)}>+</button> </div> ) } render(<Counter />, document.getElementById('app'))
hooks API
import { render, useState, h } from "fre" function Sex() { const [sex, setSex] = useState("boy") return ( <div class="sex"> <button onClick={() => setSex(sex === "boy" ? "girl" : "boy")}>x</button> <Counter sex={sex} /> </div> ) } function Counter(props) { const [count, setCount] = useState(0) return ( <div class="counter"> <h1>{props.sex}</h1> <button onClick={() => setCount(count + 1)}>+</button> <h1>{count}</h1> </div> ) } render(<Sex />, document.getElementById("app"))
props
虽然 hooks API 使得 state 在 function 内部受控,但是 props 仍然是这个组件从外部接受的√
如下,sex 就是从父组件传下来的
function Counter(props) { const [count, setCount] = useState(0) return ( <div class="counter"> <h1>{props.sex}</h1> <button onClick={() => setCount(count + 1)}>+</button> <h1>{count}</h1> </div> ) }
JSX
默认也对外暴露了 h 函数,可以选用 JSX
import { h } from 'fre'
webpack 需配置:
{ "plugins": [ ["transform-react-jsx", { "pragma":"Fre.h" }] ] }
keyed-diff-patch
基于 fiber 链表的 diff 方案,使用 hash 标记位置,更方便的比对
Concurrent
异步渲染,通过时间切片,suspense 的方式,对任务进行优先级调度,打断继续任务
halo 大家好,我是 132,然后就是…… 经过最近几天的探讨,fre 终于发了一个……能跑起来的版本了 这次的更新主要是针对 diff 和 proxy 我一直追求一种【刚刚好】的状态,就是代码量缩减到最简,然后性能在崩坏的边缘不断试探 fre 就是一个这样的框架,你可以看到它只有300+行代码,却麻雀虽小,五脏俱全。 install yarn add fre -S 复制代码 use impor
halo,大家好,好久不贱呢! 最近因为看了一些 be 的小说,整个人都比较致郁::>_<:: 就在昨天,我用了一天的时间写了 fre,又一个小而美的前端MVMM框架 可能你觉得,有了 vue 和 react,没必要再写一个了::>_<::我觉得我还是想想办法寻找一下它的存在感吧 先看 API: import { useState, html, render } from 'fre' funct
int a
halo 大家好,好久不贱呢~ 好久没出来浪了::>_<::,主要是之前在重构 c站,现在重构完了 是时候重构一下俺的轮子了…… 所以,如你所见,smox、fre、eplayer 都更新了 这篇文章,主要来说说,fre 框架的设计 Use import { h, render, useState } from 'fre' function Counter() { const [count,
面试官自我介绍 我的自我介绍 我的教育经历 1.有没有学过事件冒泡 2.了解箭头函数和普通函数的区别吗? 3.js中如何实现if语句 4.是否了解浏览器缓存 5.vue的生命周期和钩子函数 6.算法题(域名参数的解析,判断([{的规范,还有一个太难了没看) ... 哈哈哈哈好多都没答上来,但也是一次宝贵的经验让了解了大公司的考察方式。面试官很好,最后虚心向面试官求教如何准备实习提升技能,他也很认真
前端框架图图形展示: 如上图所示,WeX5前端框架(UI2)分以下部分: 基础库 WeX5前端依赖的两个基础库:数据感知MVVM和jQuery,其中数据感知MVVM基于Knockoutjs改进的。 模块框架 UI2遵循AMD模块标准,采用RequireJS实现。模块化是UI2的基础,UI2的所有资源(包括js、css和html等)都是模块,都采用模块化方式引入,采用模块化方式管理依赖。 组件框架
美团前端一面 1.简短的自我介绍 2.说说平时怎么学习前端的,还问了看那个up主的视频 3.看你项目有用axios,axios底层原理 4.axios用promise怎么写(没搞懂啥意思) 5.现场做了一个promise题,写答案 6.说说了解的数组的方法 7.怎样判断一个值的是什么类型(先typeof,再instance of) 8.原型 原型链 9.浏览器缓存机制 10.http 11.tcp
又来面美团了,美团的面试体验都挺好的。凭回忆记录一下 *以下表达式值是什么 String('11')==new String('11') String('11')===new String('11') //我理解这里实际上new出来的会当成一个对象来看,String的话就是类型转换而已。所以==能做类型转换时,就会只比较值,===时就会出现类型不同。若都new,两个new出来的对象也是不同的对象
base:北京 部门:到家 一面:9月2号,时长一个小时左右 内容当时没有记录,已经忘的差不多了,但整体上不难也不偏,手撕也简单,都很常规 二面:9月6号,时长50分钟左右 宏任务、微任务、事件循环(原理+输出题) 倒计时 浏览器渲染原理 异步加载、async、defer webpack配置、构建流程 axios封装、源码流程(axios做了啥) 自定义组件 let、const、var css居中
笔试 3.25 美团一面 酒旅研发 3.30 如何判断一个东西是不是数组 事件委托,利用的是什么原理进行实现 v-for的key的作用 事件循环 做一个题 事件循环 cors跨域原理,前后端需要做什么?通过设置字段来实现跨域 浏览器缓存策略,强缓存,通过什么字段控制的(cache-control,有什么值)(相关缓存头、字段的值等)、协商缓存 全排列 new操作做了什么 Promise.all()