React Native中的iconfont 关于在React Native中使用iconfont,网上已有很多非常好的解决方案,用的最多的就是react-native-vector-icons , 这个库支持很多常用的...IconFont的使用原理 其实IconFont就是一些文字,通过在web上的使用,我们可以大概猜出使用方法: 指定字体集 把对应的16进制码当成文字写到文本中 在React Native中同样如此,我们可以通过...实际上,一个字体通常由数个表(table)构成,字体的信息存储在表中。...这里最好给每个icon定一个易于理解的名字,可以使用http://font.baidu.com/editor 使用自定义的IconFont 有了上面的摸索,要支持自己的IconFont并不难。...tag-svip:{icon('tag-svip')} ) } } 另外,在工程中
想解决的问题 你是不是想在混合开发中子页面返回父页面中触发父页面的事件 首先你得对mui开发混合app有所了解,然后你就会知道,其实坑特别多 先创建一个H5+APP就是下面这样样子 然后就按照你一般的操作新建一个...然后重点来了,打开页面并返回当前页面并且触发事件,最好是采用下面这种 方式,记住id很重要,一定记得要写 mui.openWindow({...() 进行重定义下面就是方法 列表内容 let old_back = mui.back; var backk = function() { old_back(); return true...; } 然后在 backk() 这个方法里面去获取你需要返回的页面ID,完整的返回方法如下 var twebc = plus.webview.getWebviewById(“index.html”);...var backk = function() { let twebc = plus.webview.getWebviewById("index.html"); mui.fire(twebc
下载apk格式的指定app软件; 将apk格式的文件名更改为后缀名为zip格式; 用winrar或者7-zip…解压软件解压,然后就找到其中的ttf格式的字体文件。...举例说明,我想找到XX纸条APP中使用的字体。那么先下载然后修改为如下的zip文件,然后解压出来,然后再找到解压出来的文件夹,然后直接搜索fonts文件夹,然后再找到ttf文件。
本文是有关配置的文章,并不对Vim的核心技巧进行说明,有需要的童鞋可以参考文档和相关书籍。这里主要配合tmux和vim可以更有优雅的帮助我们在终端中进行Python编程。 先来个大致的效果图吧: ?...> + % 垂直分屏 感觉好奇怪,我就改成了相对直观的方式: + |, 类似在屏幕上加一条处置线 + -, 类似在屏幕上加一条水平线 # Split pane. unbind...Vim相同的方式,只是操作的前缀不同罢了。...vi='vim' 自动给打开的文件添加头部 例如我们编写Python脚本的时候经常会在文件开头添加执行文件的Python路径以及文件的编码方式,我们可以通过在Vim的配置文件中添加一个函数,并让他在打开一个新的缓冲区的时候自动添加到头部...其他插件 Vim 的插件很丰富,这里我就不再一一赘述了,希望这些强大的工具能让我们在终端中更优雅的编写Python(不限于Python啦),有关我使用的vim插件都在我的.vimrc中,有兴趣的童鞋可以搜索相应的插件名称进行查看
首先简单介绍下 strpos 函数,strpos 函数是查找某个字符在字符串中的位置,这里需要明确这个函数的作用,这个函数得到的是位置。 如果存在,返回数字,否则返回的是 false。...而很多时候我们拿这个函数用来判断字符串中是否存在某个字符,一些同学使用的姿势是这样的 // 判断‘沈唁志博客’中是否存在‘博客’这个词 if (strpos('沈唁志博客', '博客')) {...echo '不存在'; } 输出了’不存在’;原因是因为 ‘沈’ 在‘沈唁志博客’中的第 0 个位置;而 0 在 if 中表示了 false,所以,如果用 strpos 来判断字符串中是否存在某个字符时...必须使用===false 必须使用===false 必须使用===false 重要的事情说三遍,正确的使用方式如下 // 判断‘沈唁志博客’中是否存在‘博客’这个词 if (strpos('沈唁志博客...原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明:转载自:在PHP中strpos函数的正确使用方式
本文是有关配置的文章,并不对Vim的核心技巧进行说明,有需要的童鞋可以参考文档和相关书籍。这里主要配合tmux和vim可以更有优雅的帮助我们在终端中进行Python编程。 先来个大致的效果图吧: ?...修改分屏快捷键 tmux的分屏快捷键默认值为: + " 水平分屏 + % 垂直分屏 感觉好奇怪,我就改成了相对直观的方式: + |, 类似在屏幕上加一条处置线 + -, 类似在屏幕上加一条水平线 ?...自动给打开的文件添加头部 例如我们编写Python脚本的时候经常会在文件开头添加执行文件的Python路径以及文件的编码方式,我们可以通过在Vim的配置文件中添加一个函数,并让他在打开一个新的缓冲区的时候自动添加到头部...这样当我们使用 ? 的时候便会匹配到文件后缀并执行头部添加函数进行内容添加, 其他语言的脚本例如bash、perl等都是类似的方式。...其他插件 Vim 的插件很丰富,这里我就不再一一赘述了,希望这些强大的工具能让我们在终端中更优雅的编写Python(不限于Python啦),有关我使用的vim插件都在我的.vimrc中,有兴趣的童鞋可以搜索相应的插件名称进行查看
写在最前面 为了在 react 中更好的使用 ts,进行一下讨论 怎么合理的再 react 中使用 ts 的一些特性让代码更加健壮 讨论几个问题,react 组件的声明?...react 高阶组件的声明和使用?class组件中 props 和 state 的使用?......中的组件从定义方式上来说,分为类组件和函数式组件。...因为react中的高阶组件本质上是个高阶函数的调用,所以高阶组件的使用,我们既可以使用函数式方法调用,也可以使用装饰器。...但是在TS中,编译器会对装饰器作用的值做签名一致性检查,而我们在高阶组件中一般都会返回新的组件,并且对被作用的组件的props进行修改(添加、删除)等。
TypeScript 是 JS 类型的超集,并支持了泛型、类型、命名空间、枚举等特性,弥补了 JS 在大型应用开发中的不足。...在单独学习 TypeScript 时,你会感觉很多概念还是比较好理解的,但是和一些框架结合使用的话坑还是比较多的,例如使用 React、Vue 这些框架的时候与 TypeScript 的结合会成为一大障碍...,需要去查看框架提供的.d.ts 的声明文件中一些复杂类型的定义、组件的书写方式等都要做出不小的调整。...主要用于 TypeScript 识别.vue 文件,Ts 默认并不支持导入 vue 文件 使用 开始前我们先来了解一下在 vue 中使用 typescript 非常好用的几个库 vue-class-component...,$emit 会在 Promise 对象被标记为 resolved 之后触发 @Emit 的回调函数的参数,会放在其返回值之后,一起被$emit 当做参数使用 vuex 在使用 store 装饰器之前,
于是,这篇文章就分享一下如何尽量优雅地借助 Zotero 用纯文本方式完成论文中参考文献的引用和管理。...由于 Citekey 是纯文本格式,不同编辑器对文章本身的影响可以降到最低。在 Endnote 中同样有类似的引用方式,这个概念被称作 Temporary citation。...在 Word 插件中的 Zotero 的引用效果如下图所示。 ? 类似的效果只有同时在我们使用的编辑器中实现,才能做到 CITE AS YOU WRITE。...自动操作 如果你在使用 macOS,或许还不知道它也有类似于 iOS 中快捷指令的功能,叫做 Automator(自动操作)。...设置方式如下: ? ? 同时我给这个动作也自定义了缩写,方便快速输入。最终的实现效果如下: ? 如果使用 VSCode 来编辑,插件用起来非常方便,就无需上面这些设置了。
String 在 Java 中是不可变的。 不可变类只是一个无法修改其实例的类。 创建实例时,将初始化实例中的所有信息,并且无法修改信息。 不可变类有许多优点。...如果字符串是可变的,则使用一个引用更改字符串将导致其他引用的错误。 2. 缓存的哈希码 字符串的哈希码经常在 Java 中使用。 例如,在 HashMap 或 HashSet 中。...不可变保证哈希码总是相同的,这样它就可以缓存起来而不用担心变化。这意味着,每次使用时都不需要计算哈希码。 这更有效率。...字符串不是不可变的,连接或文件将被更改,这可能会导致严重的安全威胁。 该方法认为它连接到一台机器,但事实并非如此。 可变字符串也可能在 Reflection 中引起安全问题,因为参数是字符串。...不可变保证了线程安全 由于无法更改不可变对象,因此可以在多个线程之间自由共享它们。 这消除了进行同步的要求。
那么这样的检验性代码一般都是必不可少的,但是写在具体的业务代码中又显得非常臃肿,因此可以用责任链模式,将这些检查步骤串联起来,而且不影响代码美观,可以使我们在编码时更加专注于某一个具体的业务逻辑处理。...; return; } System.out.println("您是管理员,允许操作"); } } 接着修改MemberService中的代码...其实我们平时使用的很多权限校验框架都是运用这个原理的,将各个维度的权限处理解耦之后再串联起来,只处理各自相关的职责。如果职责与自己不相关,则抛给链上的下一个Handler,俗称“踢皮球”。...2 责任链模式和建造者模式结合使用 因为责任链模式具备链式结构,而在上面代码中,负责组装链式结构的角色是MemberService,当链式结构较长时,MemberService的工作会非常烦琐,并且MemberService...产生这些问题的原因就是因为链式结构的组装过于复杂,而对于复杂结构的创建,我们很自然地就会想到建造者模式,使用建造者模式,完全可以对MemberService指定的处理节点对象进行自动链式组装,客户只需指定处理节点对象
gizp压缩是一种http请求优化方式,通过减少文件体积来提高加载速度。html、js、css文件甚至json数据都可以用它压缩,可以减小60%以上的体积。...安装: npm i compression-webpack-plugin -D vue.config.js中的配置 const CompressionPlugin = require("compression-webpack-plugin...new CompressionPlugin({ test: /\.js$|\.html$|\.css$|\.jpg$|\.jpeg$|\.png/, // 需要压缩的文件类型...threshold: 10240, // 归档需要进行压缩的文件大小最小值,我这个是10K以上的进行压缩 deleteOriginalAssets: false...全部完成后,再访问网页,就能看到请求文件的Response Headers中多了一行 content-encoding: gzip ?
那么这样的检验性代码一般都是必不可少的,但是写在具体的业务代码中又显得非常臃肿,因此可以用责任链模式,将这些检查步骤串联起来,而且不影响代码美观,可以使我们在编码时更加专注于某一个具体的业务逻辑处理。...); return; } System.out.println("您是管理员,允许操作"); } } 接着修改MemberService中的代码...[file] 其实我们平时使用的很多权限校验框架都是运用这个原理的,将各个维度的权限处理解耦之后再串联起来,只处理各自相关的职责。...2 责任链模式和建造者模式结合使用 因为责任链模式具备链式结构,而在上面代码中,负责组装链式结构的角色是MemberService,当链式结构较长时,MemberService的工作会非常烦琐,并且MemberService...产生这些问题的原因就是因为链式结构的组装过于复杂,而对于复杂结构的创建,我们很自然地就会想到建造者模式,使用建造者模式,完全可以对MemberService指定的处理节点对象进行自动链式组装,客户只需指定处理节点对象
我们有个服务以类似 SideCar 的方式和应用一起运行,SideCar 和应用通过 Unix Domain Socket 进行通讯。...为了方便用户,在开发的时候不必在自己的开发环境中跑一个 SideCar,我用 socat 在一台开发环境的机器上 map UDS 到一个端口。...这样用户在开发的时候就可以直接通过这个 TCP 端口测试服务,而不用自己开一个 SideCar 使用 UDS 了。 因为所有人都要用这一个地址做开发,所以就有互相影响的问题。...我在使用说明文档里用红色大字写了这是开发测试用的,不能压测,还是有一些视力不好的同事会强行压测。隔三差五我就得去解释一番,礼貌地请同事不要再这样做了。 最近实在累了。...Chain 加入到 INPUT 中,对此端口的流量进行限制。
对数据进行分组,是我们在开发中经常会遇到的需求,使用 JavaScript 进行数据分组的方式也有很多种,但是由于没有原生方法的支持,我们自己实现的数据分组函数通常都比较冗长而且难以理解。...在看这个提案,之前,我们先来回顾下我们以前在 JavaScript 里是怎么分组的。...以前的方式 假设我们有下面一组数据: const items = [ { type: 'clothes', value: '', }, { type: 'clothes...{ groupedBy[item.type].push(item); } else { groupedBy[item.type] = [item]; } } reduce 使用..., items.filter((item) => item.type === type), ]), ); 是不是很让人崩溃 ~ Array.prototype.groupBy 好了,如果使用
flutter中的logger flutter中的日志使用print实现,但是print只能显示一种颜色,这样我们调试起来比较麻烦。...所以,我在ansicolor的基础上实现了一个可以控制颜色的日志记录框架。...如何使用 已发布pub,直接引用即可 colorize_logger: ^[last version] 地址:https://pub.dev/packages/colorize_logger github...Logger.client = CustomLoggerClient(); 下一步计划 考虑到在实际应用中,给测试的包是release的版本,这样有问题的时候我们无法看到日志,所以下一步的计划是 实现一个基于文件的日志记录...,可以存储在手机中,这样有问题可以导出日志给开发看
公共接口/** * 公共接口 */public interface Function { /** * 要做的事情 */ void invoke();}代替if else和switch...的方法/** * 代替'if else' 和 'switch'的方法 */public class IfFunction { private Map map;...> map) { this.map = map; } /** * 添加条件 * * @param key 需要验证的条件(key) *...* 否则将执行默认方法 * * @param key 需要验证的条件(key) * @param defaultFunction 要执行的方法 *...] args) { IfFunction ifFunction = new IfFunction(new HashMap(5)); //定义好要判断的条件和对应执行的方法
网页中使用css引用字体文件 有的网站字体,用户电脑上没有,如果只是单纯的定义 font-family 是不起效的。...我们可以将字体文件放置在网站目录(知道君喜欢放在OSS,但是这个需要注意跨域的问题),直接引入,这样即使用户电脑上没有该字体也能自动加载。...设置方法如下: css 代码:自定义字体 @font-face { font-family: 'MyFont';/*字体名称*/ src: url('font.ttf'); /*字体源文件*/...} 然后在定义就可以了: .text{ font-family: MyFont; /*刚刚定义的字体名称*/ } 这样就可以正常显示了。
styled-components官网 巧妇难为无米之炊,先准备米: 从iconfont官网选取图标 添加购物车 在购物车添加项目 项目中生成代码 下载代码包到本地 这套流程应该娴熟到不用看上边的文案...重点来了, 怎么在style-components中使用iconfont: 提取下载的字体文件到项目的src>assets>fonts文件夹中(当然可以根据你的项目决定其他的路径) ?...提取iconfont.css代码到全局style.js文件中的GlobalStyled的createGlobalStyle``中,用于全局通用。...36 ` 踩坑: 代码中,第33行这种地方,是需要修改原来的iconfont.css代码的。...这里因为createGlobalStyle``里边是js的字符串,所以字体图标的类似 .icon-sousuo:before { content: "\e639"; } 得将"\"转义下,改成 .
翻译:疯狂的技术宅 http://2ality.com/2018/04/extracting-loops.html 在本文中,我们将介绍两种提取循环内数据的方法:内部迭代和外部迭代。...它是 for-of 循环和递归的组合(递归调用在 B 行)。 如果你发现循环内的某些数据(迭代文件)有用,但又不想记录它,那应该怎么办?...logFiles(filePath, callback); 11 } 12 } 13} 14logFiles(process.argv[2], p => console.log(p)); 这种迭代方式与...请注意,在生成器中,必须通过 yield* 进行递归调用(第A行):如果只调用 logFiles() 那么它会返回一个iterable。...但我们想要的是在该 iterable 中 yield 每个项目。这就是 yield* 的作用。
领取专属 10元无门槛券
手把手带您无忧上云