2022ä¸å¡2å¡ä¸å¡4å¡ä¹±ç ä¸å¡
å¡æ§½æ¥è§¦æ¯å¦è¯å¥½ãä¸å¡äºå¡ä¸å¡åå¡ä¹±ç ä¸å¡ï¼è¦ç¡®å®æ¯ä½ çSIMå¡æ§½æ¥è§¦æ¯å¦è¯å¥½æè æ污æç©çé®é¢ä¼å¯¼è´SIMå¡ä¹±ç ãæ´æ¹åä½åé¢è²æºä»£ç ç¼è¾å¨ä¸ä½¿ç¨çåä½ãå½åç¨äºåºå«ä¹±ç ä¸è¯æ³å ç´ çé¢è²ä»¥åèæ¯é«äº®æ¶çé¢è²ï¼å¯ä»¥éè¿æ´æ¹åä½åé¢è²æ¥æ ¼å¼åæ¥è§£å³ä¹±ç ã
都年了,年网你的站源前端工具集应该有vueuse
摘要:一款基于Vue组合式API的函数工具集。
本文分享自华为云社区《vueuse:我不许身为vuer的新年乳山网页制作源码前端,你的工具集只有lodash!》,作者:前端要摸鱼。网站
vueuse 是源码什么?一款基于Vue组合式API的函数工具集。
以上是年网官方网站关于它的定义。
首先,站源它基于Vue Composition Api (组合式API),新年只有在支持组合式API的网站环境下,才可以正常使用它;什么是源码组合式API?
然后,它是年网一款函数工具集(可类比为lodash.js/ramda.js);
简单来说,这是站源一个能让你更早下班的工具库。
vueuse 开源吗?现状如何?当然开源!github/vueuse
star数:6.3K
社区活跃度:社区非常活跃,截止年月,一直有mr被合入主线;
被引用情况:截止年月日,npm上可查询到依赖它的库就有个,其中包括著名UI库:Element-Plus
那位常年被调侃“懂个锤子Vue”的著名开源作者Evan You也是此库的金牌赞助商;
安装 vueuse
注: VueUse 借助 vue-demi 的强大功能,可以在一个包中同时适用于 Vue 2 和 3!
Vue 3 Demo: 使用vite: github.com/vueuse/vueus...
使用Webpack: github.com/vueuse/vueus...
Vue 2 Demo: Vue CLI
使用Vue CLI: github.com/vueuse/vueus...
另外,要注意库的版本:
从v6.0版本起,vue3 需要 vue >= v3.2; vue2 需要依赖@vue/composition-api>@vue/composition >= v1.1
vueuse 能做什么?能做的那可太多了,但总体上分为以下几个类别提供工具函数:
这么列了一遍,估计你还是很懵,但因为方法实在太多,也不可能一个个都列出来。
那我就举几个有代表性的例子,带你快速理解这些方法大概是做什么的,有什么特点;
例子1: useMouse
效果:
Wooooow~~~
这可太简单易用了!亲人们,给我买!!(误)
经过源码阅读,我们可以发现,这短短的一个方法,至少做了以下这些事:
如果这些逻辑放到页面里,至少需要6行代码,飞鸟简版源码这些代码后期都会增加维护人员理解页面的成本;
而现在,你只需要一行代码;
除此之外,该方法还有组件式用法,适合更热爱标签的盆友
例子2: useInterval
顾名思义,这个方法是对延时重复调用能力的封装;
看看效果:
是不是很好用?相比手写setInterval更为便捷。
如果徒手实现这样一个套方法,多少行暂且不说,我们需要在业务中写下大量的逻辑代码。
而众所周知:
写的代码越多,出Bug的可能性越大,维护和理解的难度就越高。
从这个角度看,这个库确实是一个合格的函数工具集;
例子3:useVModel
这是一个给经常封装组件的小伙伴的大好利器。
先创建一个组件:Test.vue
接着,在index.vue中使用它
对于有组件封装需求的朋友,这个方法墙裂推荐!
不用再为了单项数据流的组件封装,而写在组件内写冗余的代码了。直接将useVModel返回的数据作为响应式对象用即可。
这可太得劲儿了~~
如何编译 dotnet/runtime 源代码
编译 dotnet/runtime 源代码,首先需要环境准备,参考官方文档《在Windows上构建dotnet/runtime的要求》。我的机器仅提前安装了 Visual Studio ,确保按需自行安装。
初次尝试在命令行窗口进入代码所在目录,输入编译命令时,遇到的第一个问题是缺少 Python 3。安装 Python 3 后,发现新问题,下载文件任务中下载地址参数无法识别。查阅 dotnet/runtime 的 issue,找到解决方案,其中发帖者也是中国人,解答了这一疑惑。
为了找到编译过程中的所有错误,运行命令生成日志。使用“MSBuild Structured Log Viewer”打开日志文件,能够清晰地查看到具体的同花顺指标源码查询下载地址。按照日志中的提示,下载文件,复制到指定位置解压,成功解决了下载错误。随后,再次编译,直至提示编译成功。
然而,运行 dotnet/runtime 自带的测试用例时,发现找不到指定 dll,进一步发现对应的 dll 已经编译,但默认编译的是 net7.0-Debug 版本,而需要的是 net-Debug。通过使用 build.cmd -h 查看,发现可以指定编译框架版本。因此,再次编译,指定正确的框架版本,最终运行测试成功。
总结,编译 dotnet/runtime 源代码过程中遇到的主要问题,主要是由于访问国外的网速较慢导致的下载问题。通过生成日志、使用“MSBuild Structured Log Viewer”查看下载地址,以及正确指定编译框架版本等方法,成功解决了编译和运行过程中遇到的问题。
年末了,react拖拽组件和最牛的代码调试技巧一起学!
年末了,react 拖拽组件和最牛的代码调试技巧一起学!前言
最近刷到了利用 H5drag、dropapi 进行拖拽组件实现的代码示例,于是想学习一下业界知名的一些拖拽组件。于是想从学习成本较低的react-sortable-hoc开始看起。那么对于一个学习者而言,我们应该如何地去优雅地学习第三方库呢?
当然是「调试」啦。
首先第一步,我们随便创建一个 react 项目,字母k的源码并且按照react-sortable-hoc的最简单的案例编写后准备调试。
比如说我们想看看SortableHandler里面的具体实现,我们给它打个断点,并且创建一个 vscode debug 配置:
按F5开启调试后我们进入SortableHandler中,看到的却是经过打包后的产物:
这显然非常不利于去读懂代码。那么我们该如何将它变成我们能看得懂的源码呢?答案就是sourcemap!
sourcemap 就是用于表示打包后代码和源码的映射关系。因此我们只需要开启 sourcemap 就可以进行 debug 的源码的映射。
我们将react-sortable-hoc项目 clone 下来(这里只拉取一层 commit、一个 master 分支):
我们可以发现整个项目是使用rollup进行打包的,我们只需要配置一下 sourcemap 开启:
然后执行npm run build,将打包好的 dist 文件夹替换至node_modules/react-sortable-hoc/dist目录下。接着在我们测试项目中将其引入路径改为:
然后我们再来运行一下 debug 试试看:
瞧!这是不是非常熟悉呢?利用调试我们可以随时随地打断点,知道变量的运行时,读起源码来是不是非常轻松呢?
注有的小伙伴可能会发现在调试的时候,打开的源码文件是只读模式,这是为什么呢?
我们可以在 vscode 左侧的CALL STACK中找到当前文件映射到的目录。
如果是node_modules/react-sortable-hoc/src/.../xxx.js,就证明你映射到的只是node_modules中的路径,是无法更改的。
这时候,你可以点击该文件对应的.js.map文件,将其中的../src/xxx.js路径改成你克隆下来的react-sortable-hoc的路径。这样的话,映射到的目录就是你本地的文件,就可以编辑啦!!~
我们修改过node_modules下的文件但又不想被覆盖,可以使用patch-package这个包。 npx patch-package react-sortable-hoc 可以生成一个 diff 文件,上传至 GitHub 上,别人 clone 后只需要运行npx patch-package即可将 diff 覆盖到node_modules下
源码阅读组件的初始化
我们首先来梳理一下示例代码的组件嵌套:
SortableContainer >> SortableElement >> SortableHandler
我们先从组件的初始化入手,从外到内一层一层解析:
SortableContainer
可以发现SortableContainer来初始化的时候,获取了各种 dom 结构以及绑定好了事件。
除此之外,它 new 了一个Manager作为总的拖拽管理中心。其主要功能如下:「注册并储存可拖拽的vector集合源码分析子节点」,「记录当前激活节点的 index」,「根据 index 进行 sort」:
最后,它渲染函数是这样的:
即通过Provider将全局 Manager 对象传递给了子组件。
SortableElement
我们可以看到,其实SortableElement的初始化只是将自身节点以及一些属性信息注册到了全局Manager对象中。
SortableHandle
SortableHandle的代码就更简单了,只是在自身 dom 上添加了一个sortableHandle的标识,用于判断用户当前点击的节点是否是SortableHandle。这部分逻辑我们在下面就可以看到~
事件触发
了解了各个组件的初始化流程之后,我们可以开始调试拖拽的整个过程的实现逻辑了~
首先我们要知道,所有的事件都是注册在SortableContainer中的,因此我们只需要对其进行调试即可。
拖拽触发事件顺序如下图:
下面让我们来看一下各种事件的逻辑吧:
handleStart
在handleStart的这个回调函数中,我们可以发现它主要做了一下事情:
handlePress
注意看,这个函数有一个比较关键的思想:就是利用克隆节点来模拟正在拖拽的节点。计算并记录好所需要的图形指标并且赋值到新节点上,并且设置position:fixed。
最后在绑定上move事件的监听----handleSortMove.
handleSortMove
函数本身很简洁,首先是updateHelperPosition。
updateHelperPosition
updateHelperPosition的代码经过清理后,核心就在于对克隆元素设置translate,来模拟拖拽的过程。
其次就是最重要的animateNodes函数了。
这里包含了拖拽排序最核心的节点移动逻辑。核心思想如下:
遍历所有sortableElement,如果是当前激活节点,则把原有节点透明化。(因为有克隆节点了);如果不是,则判断激活节点的坐标以及当前遍历元素的坐标的大小,依此来进行translate3d的动画。
handleSortEnd
最后,当拖拽结束后,触发handleSortEnd。主要逻辑是做一些善后处理,清理各种事件监听器,全局 Manager 的变化,本身被拖拽元素恢复透明度等。。
总结
到这里,整个react-sortable-hoc实现的大致思想就全部介绍完毕啦。它并没有利用 h5 的dragapi,而是利用mousemove、touchmove之类的事件实现 h5 和移动端的兼容。利用 css3 的动画来实现 sort 效果。
但实现过程中也有一些缺点。
比如reactDom.findDomNodeapi,react 并不推荐使用它来去获取 dom,可以换成ref。
比如只能在react类组件中使用。
其他
觉得封装的比较好的工具函数用于学习记录:
2. 获取当前元素距离窗口的偏移值(也可以使用elm.getBoundingClientRect())
3.移动数组内元素
4. 过滤对象某些属性
如何看vs源码
1、在创建工程的时候不要勾选把解决方案和项目放在同一目录中。
2、要把下载VS的硬盘和保存项目的硬盘分开,下载的在C盘,保存项目的就应该不在C盘,D盘,E盘都可以。
3、在写完代码之后要把代码添加到右侧的头文件中即可查看。
圣诞树代码
1. 绘制年的圣诞树使用Python代码。
2. 创建一个新的Python文件tree1.py,或者直接运行以下代码:
```python
# 声明树的高度
height = 5
# 树的雪花数,初始为1
stars = 1
# 以树的高度作为循环次数
for i in range(height):
# 打印空格和星号来形成树的每一层
print(' ' * (height - i) + '*' * stars)
# 雪花数增加,以形成树的形状
stars += 2
```
3. 代码是程序员使用开发工具支持的语言编写的源文件,是一套由字符、符号或信号码元以离散形式表示信息的明确规则体系。
4. 代码设计的原则包括唯一确定性、标准化和通用性、可扩充性与稳定性、便于识别与记忆、力求简短与格式统一以及容易修改等。
5. 源代码是代码的一个分支,从某种意义上说,源代码相当于代码。
6. 在现代程序设计语言中,源代码通常以文本文件的形式出现,最常用的格式是为了编译成计算机程序。
7. 计算机源代码的最终目的是将人类可读文本转换成计算机可执行的二进制指令,这一过程称为编译,由编译器完成。
年最佳CMS内容管理系统
正在寻找最佳内容管理系统(CMS)以构建网站?CMS或内容管理系统能帮助您创建功能性网站,无需从头开始编写代码。然而,不同的CMS具有各自的特点与限制,选择最适合自己特定需求与预算的工具至关重要。本文将为您介绍个最佳CMS选项,覆盖从博客、电子商务商店到营销网站的各类内容。
何为CMS?
CMS,全称为内容管理系统,实质上是协助您系统性地管理网站内容的工具。借助CMS,您可以在易于使用的编辑器中操作,而非直接使用代码添加内容,例如:
发布内容后,CMS会根据您的设置向访客正确展示内容,并负责前端内容的组织。CMS不仅适用于博客内容,还能管理几乎任何类型的内容。例如,您的CMS中的“内容”可能包括:
或多种类型的内容!
一个好的CMS平台能够帮助您根据需要管理多种不同类型的页面。
何为无头CMS?
在接下来的选项中,您将遇到“无头CMS”的概念。使用无头CMS,您负责管理后端内容,通过API查询数据构建前端界面。这种方法的益处在于,您能够灵活地在任何地方使用内容,从网站到移动应用等。
无头CMS需要一定的技术知识,但能赋予您更多内容使用方式与位置的自由。
选择CMS时考虑因素
选择CMS时,需考虑以下核心功能:
个最佳CMS软件解决方案
以下是CMS选项的详细列表,我们将深入分析:
WordPress - 免费:WordPress是目前最受欢迎的CMS之一,拥有超过%的网站用户。最初为博客平台,现演变为构建任何类型网站的完整CMS,包括电子商务商店、会员网站、论坛等。
Drupal - 免费:Drupal是一款流行且功能强大的开源CMS,特别擅长管理内容丰富的网站。具备灵活的分类系统与内置用户访问控制,支持主题定制与模块扩展。
Joomla - 免费:与WordPress和Drupal并驾齐驱的开源CMS,提供模板与扩展市场,可帮助您根据需求创建网站。
Magento - 免费起,每月2,美元:Magento是一款开源的电子商务CMS,提供强大的安全性和灵活性,但对非技术用户较为复杂。支持免费开源版本与付费的Magento Commerce服务。
HubSpot CMS - 每月美元起:HubSpot CMS为希望与客户建立联系的企业与营销人员提供卓越支持,集成免费HubSpot CRM,帮助您将访客转化为客户。
Kentico - 免费起,每年7,美元:Kentico是一款面向企业内容管理的CMS,提供Kontent平台的免费套餐与付费选项。作为无头CMS,您需具备一定的技术知识来创建前端。
Squarespace - 每月美元起:Squarespace是一个托管网站构建工具,非常适合非技术用户轻松创建网站。适合基本网站创建,对于复杂内容可能需要更灵活的CMS。
dotCMS - 企业版免费,高级版:dotCMS采用API优先方法,支持拖放UI构建不同内容类型,如博客文章或电子商务产品。后端提供作者身份功能与内容访问控制选项。
Contentful - 每月美元起,企业每月美元:Contentful旨在构建全渠道数字体验,提供RESTful API查询与CDN缓存,适合需要在多个数字渠道使用内容的场景。
Zephyr - 联系销售:Zephyr为机构提供云托管CMS解决方案,专为建立客户网站的机构设计,需与代理合作伙伴合作使用。
Canvas CMS - 联系销售:Canvas CMS是一款基于云的CMS,带有拖放式设计系统,非技术用户可轻松设计自定义网站。移动响应式与AMP就绪,适用于自定义数据库结构与多来源数据集成。
Grav - 免费:Grav是一款轻量级、开源平面文件CMS,无需数据库,从文本文件查询内容。提供动态内容类型与Markdown编辑器,轻巧部署。
Craft CMS - 免费:Craft CMS专注于用户友好的内容创建过程,支持自定义内容类型与内置工具设计内容字段布局。提供Twig模板与无头设置的GraphQL API选项。
Sitefinity - 联系销售:Sitefinity专注于为营销人员提供优化的个性化内容。通过洞察了解客户,快速设置A/B测试优化内容。支持无头CMS部署。
Shopify - 每月美元起:Shopify是一个托管电子商务平台,提供简单且安全的商店管理。借助应用市场,仍可获得灵活性,但无法完全访问底层源代码。Shopify Plus提供更大灵活性。
BigCommerce - 每月美元起:BigCommerce是另一个知名的电子商务CMS平台,提供多渠道销售功能。支持托管商店、亚马逊、eBay等销售。提供每月美元起的计划。
Umbraco CMS - 免费(开源),每月美元起(托管版):Umbraco支持自我托管或付费托管服务。提供简单编辑器、内容建模与SEO等功能,支持Umbraco Heartcore无头CMS选项。
Agility CMS - 每月美元起:Agility CMS是另一种无头CMS,提供内容建模、SEO、日程安排、内容关系等管理选项,通过CDN加速内容交付。
Adobe Experience Manager - 联系销售(平均,美元以上/年):Adobe Experience Manager结合CMS与数字资产管理,为不同渠道提供个性化Web体验。
Oracle WebCenter Content - 3,美元起:Oracle WebCenter Content是一款企业内容管理工具,提供非结构化内容存放与多应用交付选项。
Ghost - 免费,每月美元起(托管版):Ghost是一个快速、专注于博客与发布的CMS,内置必要功能,如电子邮件选择加入与每月订阅费。适用于博客/发布,不适用于更广泛内容管理。
总结
CMS能简化内容管理与网站构建过程,无需频繁编辑代码。选择最适合您需求与预算的工具至关重要。对于非技术用户或无技术团队支持的个人,WordPress、Drupal、HubSpot CMS或Squarespace等工具可能是理想选择。对于需要灵活部署内容至多个位置的用户,无头CMS的灵活性可能更胜一筹,但需具备相应技术知识。
2024-11-18 19:17
2024-11-18 18:58
2024-11-18 18:45
2024-11-18 18:12
2024-11-18 17:54