redux-saga
活着就意味着必须做点什么,请好好努力。——《地下》 我们知道React等单页应用在开发时,页面变化依赖于state 随着 JavaScript 单页应用开发日趋复杂,JavaScript 需要管理比任何时候都要多的 state(状态)。 这些 state 可能包括服务器响应、缓存数据、本地生成尚未持久化到服务器的数据,也包括 UI 状态,如激活的路由,被选中的标签,是否显示加载动效或者分页器等等。 管理不断变化的 state 非常困难。如果一个 model 的变化会引起另一个 model 变化,那么当 view 变化时,就可能引起对应 model 以及另一个 model 的变化,依次地,可能会引起另一个 view 的变化。直至你搞不清楚到底发生了什么。state 在什么时候,由于什么原因,如何变化已然不受控制。 当系统变得错综复杂的时候,想重现问题或者添加新功能就会变得举步维艰。 如果这还不够糟糕,考虑一些来自前端开发领域的新需求,如更新调优、服务端渲染、路由跳转前请求数据等等。前端开发者正在经受前所未有的复杂性,难道就这么放弃了吗?当然不是。 这里的复杂性很大程度上来自于...
Generator函数自动执行器
有的东西被遗忘,有的东西销声匿迹,有的东西死了,而其中几乎不含有悲剧性因素。——《寻羊冒险记》 今天用typescript写了个Generator函数自动执行器: 1234567891011export function runGenAuto(fn: Function) { let gen: Generator<Function> = fn() function next() { let result = gen.next() if (result.done) { return result.value } return result.value(next) } return next();} 为了测试效果,我们定义一个Generator函数,这个函数用于将URLSearchParams转换成一般对象 当然直接遍历不用generator也能实现上述需求,但这里主要是为了测上方的自动执行Generator...
replace、replaceAll、replaceFirst
一年好景君须记,最是橙黄橘绿时。——苏轼 聊聊这仨很常用的函数 我相信很多人也跟我一样也有个误区,错把replace当成replaceFirst,把replaceAll当成replace 实际上,replace函数会替换掉满足字符串中所有出现过第一个参数中的值的地方 例如: 1234 String string = "ruben love strawberry"; String replace = string.replace("r", "");// uben love stawbey 如果我们只需要替换第一处,则需要使用replaceFirst 例如: 1234 String string = "ruben love strawberry"; String replaceFirst = string.replaceFirst("[A-Za-z0-9]", "");// uben love strawberry 并...
collectingAndThen
向着清风吟唱的歌手,还会对着运转的宇宙歌吟。——纪伯伦《先知》 我们使用Stream收集操作收集元素时,会遇到对规则进行分组后,对每一组的数据还要进行处理的情况,这时候我们可以使用Collectors.collectingAndThen处理,例如我下面本来分组后得到一个Map<String,List<String>>,但我将分组后每一组的结果转换为了JSON格式的String 12345678910111213import java.util.Map;import java.util.stream.Collectors;import java.util.stream.Stream;import com.alibaba.fastjson.JSON;class Scratch { public static void main(String[] args) { Map<String, String> collect = Stream.<String>empty().collect(Collec...
image-comparison
人活在世,不过一场美丽的寄居。——简嫃曾 我们可以使用image-comparison来在java中进行两个文件的对比: 项目地址:https://github.com/romankh3/image-comparison 它会自动生成对比后带红框的对比图,还能返回这些正方形的信息 首先引入GAV: 12345<dependency> <groupId>com.github.romankh3</groupId> <artifactId>image-comparison</artifactId> <version>4.4.0</version></dependency> 使用: 123456789//load images to be compared: BufferedImage expectedImage = ImageComparisonUtil.readImageFromResources("expected.png"); ...
在单html页面中使用react并配置jsx
天空更适合仰望,而不是居住。——杜鲁门·卡波特 《蒂凡尼的早餐》 首先按照官方文档一分钟用上React以及快速尝试JSX,如果你不需要JSX,可以按照这个Demo去实现 我们在页面上放入这三个cdn: 123<script crossorigin src="https://unpkg.com/react@16/umd/react.production.min.js"></script><script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script><script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script> 然后新建一个script标签并指定type="text/babel",例如: 1<script s...
linux查看版本型号
我喜欢我的懦弱,痛苦和难堪也喜欢。喜欢夏天的光照,风的气息,蝉的鸣叫,喜欢这些,喜欢得不得了。——《寻羊冒险记》 特意配置了三个系统的阿里云服务器,给大家看看这个命令的效果~ 1lsb_release -d 首先是centos 然后是Alibaba Cloud Linux 最后是Ubuntu
live server
用杜冷丁救场,药效却消亡。——《恋爱的犀牛》 在使用vscode进行开发的时候,我想运行一个html文件到浏览器中并热更新,就需要使用到Live Server插件了 在vscode安装完成该插件后,即可在html页面按下ALT+L再按一下ALT+O即可运行到浏览器 按下第一个键后会提示 再次按下ALT+O,即可运行到浏览器 我们查看元素是能看到我们的Live Server建立socket连接代码的 包括我们在vscode保存了一下代码,也是能看到ws请求的
Files.delete
终点线只是一个记号而已,其实并没有什么意义,关键是这一路你是如何走的。——村上春树 在java中我们除了用这种方式删除文件: 12345678File file = new File("D:\\file\\projects\\img-comparison-demo\\target\\generated-sources");if (file.exists()) { try { boolean delete = file.delete(); } catch (Exception e) { e.printStackTrace(); }} 还可以使用Files工具类: 12345try { boolean delete = Files.deleteIfExists(Paths.get("D:\\file\\projects\\img-comparison-demo\\target\\generated-sources"))...
photopea
我明知生命是什么,是时时刻刻不知如何是好,所以听凭风里飘来花香泛滥的街,习惯于眺望命题模糊的塔,在一顶小伞下大声讽评雨中的战场。——木心 分享一款在线ps的网站:https://www.photopea.com/ 非常方便~
