问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎样建立自己的函数库

发布网友 发布时间:2022-04-22 23:57

我来回答

2个回答

懂视网 时间:2022-04-23 04:19

这次给大家带来如何开发一个自定义库,开发一个自定义库的注意事项有哪些,下面就是实战案例,一起来看一下。

当然这个库还处在刚刚开始阶段,功能实现的比较简单,在此发表出来,欢迎大家借此为基础一起去完善它。项目地址:Hoz.js,欢迎大家start,fork,以及提issues。

特点

  • 声明式的模板语法

  • 借鉴redux,flux等的思想,引入状态管理

  • 引入virtual dom,diff 算法,提高性能

  • 声明式语法

     <p id = "app">
     <p>
      <img src="{{moveImage}}" />
      <p>{{moveName}}</p>
     </p>
     </p>
    var hoz = new Hoz('app', state, changeStore)
    var state = {
     moveName: '',
     moveImage: ''
    }
    function changeStore (state, action) {
     switch (action.type) {
     case 'SET_NAME': {
     state.moveName = action.data
     break
     }
     case 'SET_IMAGE': {
     state.moveImage = action.data
     break
     }
     }
    }
    hoz.store.dispatch({
     type: 'SET_NAME',
     data: '后来的我们'
    })

    这就是一个hoz应用,通过简洁的模板语法声明式的将数据渲染进DOM系统。
    且所有东西都是响应式的。

    借鉴redux,flux等的思想,引入状态管理

    在状态管理方面借鉴redux的思想,实现了单向数据流的管理。
    主要定义了state,action,changeStore,dispatch4个概念。

    state

    存放数据

    var state = {
     moveName: '',
     moveImage: ''
    }

    changeStore

    相当于redux中的reducer,存放着对数据的所有操作

    function changeStore (state, action) {
     switch (action.type) {
     case 'SET_NAME': {
     state.moveName = action.data
     break
     }
     case 'SET_IMAGE': {
     state.moveImage = action.data
     break
     }
     }
    }

    接收action,执行对应的方法,修改state中的数据。不同于redux的是,redux放回的是全新的state,而它是直接操作当前的state,因为state中的数据已经通过Object.defineProperty方法进行了跟踪,这个后面再将。

    action和dispatch

    当想要对数据进行修改的时候,我们必须通过提交action的方式,在changeStore中去修改state

    hoz.store.dispatch({
     type: 'SET_NAME',
     data: '后来的我们'
    })

    这个就是hoz的状态管理策略

     view -> dispatch -> action -> changeStore -> state -> view

    好处

    随着应用的日益复杂,数据量的增大,如果不对数据进行相应的管理,管理不断变化的状态,是非常困难的。状态在什么时候,由于什么原因,发生了怎样的变化都难以观察。

    1. 这意味着应用中所有的数据都遵循相同的生命周期,这样可以让应用变得更加可预测且容易理解。

    2. 我们可以从 changeStore 中看到state能够发生的所有变化

    3. 对state修改的唯一方式就是向changeStore提交action,所以数据的每一次变化都会从一个地方流过,方便我们的debug等操作。

    引入virtual dom 和diff算法

    总所周知,由于dom元素的庞大,以及dom操作容易引起页面重排的原因,直接操作dom性能是非常非常差的。
    所以hoz引入了virtual dom算法,用原生的JavaScript对象去映射dom对象,因为原生JavaScript对象的操作更快更简单。
    如何映射呢?比如

    class VNode {
     constructor (sel, tagName, id, className, el, children, data, text, key) {
     this.tagName = tagName // p
     this.sel = sel // p#id.class
     this.id = id // id
     this.className = className // []
     this.children = children // []
     this.el = el // node
     this.data = data // {}
     this.key = key
     this.text = text
     }
    }
    export default VNode

    只是一个JavaScript对象,代表一个dom元素。

    我根据hoz构造函数中传进来的 id 所指向的元素作为根元素建立一个虚拟dom树,当数据改变的时候,不直接操作dom,而是在虚拟dom树上进行操作修改。然后通过diff算法对比新旧虚拟dom树,对真实dom进行最小单位的修改。

    数据响应式原理

    hoz式如何做到数据的响应式的呢?这里主要通过借助Object.defineProperty方法实现了一个发布/订阅模式,通过Object.defineProperty修改state中数据的getter和setter属性,在首次渲染的时候,在getter中将对应的订阅者添加到一个主题对象中去,当数据改变的时候在setter中调用对应数据的主题对象的notify方法发布消息,通知每个订阅者更新。

    state -> data -> publisher 一对多的关系
       |
       Dep
       |
    view -> {{data}} -> subscribers

    希望大家借此为基础一起去完善它。项目地址:Hoz.js,欢迎大家start,fork,以及提issues。

    相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

    推荐阅读:

    前端,HTT,计算机与网络

    webkit-font-smoothing字体抗锯齿渲染使用案例详解

    热心网友 时间:2022-04-23 01:27

    1、新建一个Visual C++的“Win32项目”,建立一个空项目。2、建立完成后,右键点击右边的“解决方案”中的“源文件”。3、选择“添加”,然后添加“新建项”。4、选择“Visual C++”中的C++文件,点“添加”。5、在新加的C++文件里面写好代码,然后保存。6、编译运行即可(快捷键Ctrl+F5)。自定义函数需要通过VBA建立。1、按组合键Alt+F11打开VBA编辑窗口。2、点窗口菜单“插入“——”模块”,插入一个新的模块“模块1”。4、关闭窗口,返回EXCEL表格运行自定义函数。1、自定义函数代码必须以Function开头,以End Function结束;2、代码中的SV为自定义函数名称,括号内的a、b、h是其三个参数,分别对应梯形的上底长度、下底长度和高度。
    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    ...防御里的4个都开不起来 错误的代码是80020002 80010007 煎牛排用什么肉好 茄子怎么做比较好吃呢? English tabloid手抄报 English tabloid手抄报怎么画 邓小平“南方讲话”关于发展问题最著名的观点是( )。 电脑电源输出12V、5V的作用是什么? win10手机能玩电脑游戏win10系统的手机难道可以安装和电脑一样的软件... 如何设置才能做到只能通过远程桌面访问server2003 怎样解电脑开机密码?且要保住电脑资料,请各位高手赐教,谢谢! 糖友荟糖友荟简介 怎样去除身上的静电呢 小孩子身上有静电是怎么回事 联考的省份都有哪些 326联考有哪些省 联考省份 联考省份都有哪一些? 贵州省教师公招考试考些什么科目? 3.7v2000mah的高能无记忆锂离子电池的配套充电器 12.6v高能无记忆充电锂电池组 那有的买 高能无记忆锂离子电池3,6v3800mah海洋王充不进电了电池存不进电 关于 高能无记忆锂离子电池 3.6v 1800mah 高能无记忆锂离子电池多少钱一个啊? 怎样创建自己的头文件和库 为什么鲨鱼不吃向导鱼? 鲨鱼最不喜欢吃什么 请问鲨鱼害怕什么鱼? 鲨鱼不吃向导鱼是真的吗? 中国银行申请信用卡显示状态 三亲见,一个星期了这是代表没通过还是通 oppor9s外屏跟oppor9splus一样吗? 我想建立一个自己的库该怎么做呢? 在word中如何设置字体格式最小,最不浪费纸,而且打印出来很清晰? 我在网上交的新农合费用,但是没有现实的*,农合本也没记录,到时候要是住院,怎么报销?_百度问一问 交了新农合没卡怎么报销 微信里交的新农合怎么报销 新农合在网上交的,没有发票,住院后怎样报销? 新农合交520元怎样报销 致给篮球运动员的加油稿 蓝球穿越加油稿100字 l蓝球运动会加油稿 求学霸现写五篇或五篇以上的篮球运动会加油稿,要语句优美,新颖,不要复制粘贴的,自己写!!!! Android 怎么自定义共享库 做客喝茶最忌讳失礼,喝茶叩手礼你用对了吗? 想在编程的时候自定义函数库,应该如何做,C语言,具体一点,最好有图片流程说明。 把一张图片弄成九宫格的软件? 把一张图弄成九宫格样式的软件叫什么? 手机定位收费39元,是真的吗?怎么不好用啊? 在有丝分裂和减数分裂中染色体条数怎么判断要求:带图 怎么看染色体数目 怎么看染色单体数目 怎么看DNA分子数目 怎么看同源染色体数目 在有丝分裂和减数分裂中染色体条数怎么判断 如何看染色体的数量