前端 react 用 react-i18next 做国际化处理的一些使用记录
<Trans i18nKey={'app.btn.setIcon'} defaults={'设置图标'} /> i18nKey 是 对应翻译文件的key,defaults 是默认值,就是找不到翻译文件的时候显示的默认内容 // t 的用法 {t('common.button.cancel', { defaultValue: '取消 {{name}}', name: iconPath })} 第一个参数 common.button.cancel 为翻译文件的key,defaultValue 是找不到翻译时候显示的默认内容, name 的对应 defaultValue 里面的 {{name}} 动态值,他会知道替换里面的内容
前端 使用vue3+provide+inject+watch组件层级太深之后偶发watch监测不到的情况
最近开发页面装修功能,封装了很多层级的子组件,顶层用provide设置当前编辑的右侧数据,如下图 在最里面的子组件使用了watch来监听数据的变化 // 监听数据变化 watch( () => props.modelValue, (newVal) => { if (!newVal) return; rightStyle.value = newVal; }, { deep: true } ); watch( () => rightStyle.value, () => { // 数据更新后,通知父组件更新数据 emit('update:modelValue', rightStyle.value); }, { deep: true } ); 然后奇怪的事情发生了,如下图 watch 竟然监听不到变化,经过反复摸索,代码变更为 // 监听数据变化 watch( () => props.modelValue, (newVal) => { if (!newVal) return; rightStyle.value = newVal; }, {…
golang golang 适配器 单例模式
场景 代码层面的单进单出 比如我要指定一个短信供应商,并且整个程序都使用该供应商 比如我要指定一个缓存适配器,并且整个程序都使用该适配器 比如原来已经有写一个短信供应商,我需要进行重写,又不想修改原来的代码 下面我们以短信为例 根目录下 main.go 文件(位置1) package main import ( "fmt" "test/aliSms" "test/sms" "test/tencentSms" ) func main() { sms.SetAdapter(&aliSms.Adapter{}) fmt.Printf("output: %s \n", sms.GetAdapter().SendSms()) sms.SetAdapter(&tencentSms.Adapter{}) fmt.Printf("output: %s \n", sms.GetAdapter().SendSms()) } sms目录下 main.go 文件 (位置2) …
golang golang 适配器模式 简单示例记录
package main import ( "fmt" ) // Target 是客户端期望的接口 type Target interface { Request() string } // Adaptee1 是第一个需要适配的类 type Adaptee1 struct{} func (a *Adaptee1) SpecificRequest1() string { return "Called SpecificRequest1()" } // Adapter1 是第一个适配器类 type Adapter1 struct { adaptee *Adaptee1 } func (adapter *Adapter1) Request() string { return adapter.adaptee.SpecificRequest1() } // Adaptee2 是第二个需要适配的类 type Adaptee2 struct{} func (a *Adaptee2) SpecificRequest2() string { return "…
PHP wordpress上传文件自动重命名方法一
function custom_rename_uploaded_files($file) { $info = pathinfo($file['name']); $ext = $info['extension']; $newname = uniqid() . '.' . $ext; $file['name'] = $newname; return $file; } add_filter('wp_handle_upload_prefilter', 'custom_rename_uploaded_files');
前端 小程序海报生成神器之一Painter配合uniapp使用示例
本篇详细介绍Painter在uniapp中的使用方法 前置资源: Painter的github库:https://github.com/Kujiale-Mobile/Painter Painter在线设置网站:https://lingxiaoyi.github.io/painter-custom-poster/ 完整demo:https://gitee.com/hackchen/uniapp-painter-demo 新建项目 使用HBuilderX新建一个空项目 新建一个叫painter-demo的页面 新建一个js文件paletteData.js(这个文件可自行决定是否需要,本demo因为数据量太大,所以独立建一个文件) 通过github,下载得到painter项目文件 将项目下的components/painter文件夹复制到uniapp项目的wxcomponents文件夹下 新建完文件后,大致的目录结构如下图 修改pages.json { "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/…
golang Linux shell 通过环境变量方式启动golang 程序记录
golang程序中使用 os.LookupEnv 获取环境变量时,在Linux下启动golang程序时可以使用 export VAR=b 来赋值 shell 使用时整体示例 #!/bin/bash export HTTP_ADDR=0.0.0.0:39033 export DEBUG=true ./xxx
golang golang 网页截屏开发
最近在做一个网页截屏的功能,通过搜索,找到一个golang下不需要下载Chrome的网页截图的功能,主要是依靠 github.com/chromedp/chromedp 这个库来处理。 github.com/chromedp/chromedp 库简单使用方法在这里记录一下: ctx, cancel := chromedp.NewContext(context.Background()) defer cancel() chromedp.Run(ctx, chromedp.ActionFunc(func(ctx context.Context) error { _, err := domain.SomeAction().Do(ctx) return err }))
前端 鸿蒙开发填坑记录 web 组件01
// xxx.ets import web_webview from '@ohos.web.webview' @Entry @Component struct WebComponent { controller: web_webview.WebviewController = new web_webview.WebviewController(); build() { Column() { // src 不能带协议 Web({ src: 'www.baidu.com', controller: this.controller }) } } } // 需要额外配置当前模块下的 module.json5 文件 requestPermissions 块 { "module": { "name": "entry", "type": "entry", "description": "$string:module_desc&quo…
golang golang 枚举 使用示例
package main import ( "fmt" ) // 定义枚举类型 NicFlag type NicFlag uint // 枚举常量定义 const ( FlagUp NicFlag = 1 << iota // FlagUp=1 FlagBroadcast // FlagBroadcast=2 FlagLoopback // FlagLoopback=4 FlagPointToPoint // FlagPointToPoint=8 FlagMulticast // FlagMulticast=16 ) // 提供一个全局字典,用于存储枚举名称与枚举值之间的对应关系 var flagNames = map[NicFlag]string{ FlagUp: "up", FlagBroadcast: "broadcast", FlagLoopback: "loopback", // … 其他枚举值的映射 FlagPointToPoint: "pointtopoint&quo…
前端 electron 安装失败,其中一种处理办法
运行下面命令 npm config ls -l 上面命令会显示 .npmrc 文件所在路径 打开 .npmrc 文件,并添加下面内容 ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/"
golang 一个golang 基于 interface 链式调用的示例
// 定义一个接口,包含一个接收者为接口类型的方法,该方法返回接口自身以便于链式调用 type Chainable interface { DoSomething() Chainable DoSomething2() Chainable } // 假设我们有两个不同的结构体,它们各自实现了Chainable接口 type Step1 struct{} func (s *Step1) DoSomething() Chainable { fmt.Println("执行 Step1 的操作") return s } func (s *Step1) DoSomething2() Chainable { fmt.Println("执行 Step2 的操作") return s } func main() { // 开始链式调用 chain := &Step1{} chain.DoSomething().DoSomething2() }
前端 vite 打包 执行 build 报 Unexpected token ‘??=’
当前环境 vite 版本 4.2.1 node 版本 14.20.0 通过百度查到 Unexpected token '??=' 是由于node版本太低造成的,使用nvm 升级node 到 18 版本即可解决
前端 微信小程序web-view中拦截后退事件
if(fast.device.isWxMiniProgram()) { $("#js_wx_mini").attr('src',"/js/jweixin-1.3.2.js"); $(".icon-arrow-left").hide(); $(".fast-nav-title").css({ marginLeft:'0px' }); // 监听 popstate 事件 window.addEventListener('popstate',function(event) { wx.miniProgram.navigateBack(); }); }