Wednesday, September 1, 2021

V2EX - 技术

V2EX - 技术


看到一段代码, setTimeout(resolve, 0), 不是很明白用意?

Posted: 01 Sep 2021 04:39 AM PDT

const whenStable = async () =>   await act(async () => {     await new Promise((resolve) => setTimeout(resolve, 0));   }); 

原帖地址: https://stackoverflow.com/questions/60137762/how-can-i-test-a-react-hooks-component-by-changing-usestate?rq=1 只有一个回复,回复里面的测试文件,里面用到了这个

不是很理解这个的用意。如果说需要延时,那为什么 setTimeout 的参数是 0? 还是说,作者只是举个例子?应该设为比如 500,etc.?

以及,这个貌似有 warning

Warning: The callback passed to ReactTestUtils.act(...) function must not return anything. 

请问有 V 友能帮忙分享一下这个 dll 么,来自一个编曲插件,总是被 Windows Defender 报为病毒,虽然我知道大概率是误报,但总有点不放心

Posted: 01 Sep 2021 04:34 AM PDT

Android 支持 DHCP 获取 IPv6 了吗?

Posted: 01 Sep 2021 04:33 AM PDT

我的 Android 设备 WIFI 下均只能 通过 无状态 SLAAC 模式获取 IPv6, 现在新版本的 Android 支持 有状态 DHCP 模式 获取 IPv6 了吗?

到底什么情况下需要使用 MySQL 事务?

Posted: 01 Sep 2021 04:33 AM PDT

众所周知,MySQL 事务具有原子性,当你需要对对张表同时进行操作的时候,为了保证要么都成功,要么都失败,必须使用事务机制。

但是仔细想想,举个例子 insert 操作,除非是 sql 语句写的有问题,正常情况下很难出错,除非是网络连接失败、数据库挂了、连接池满了等意外情况。这些都是极低概率事件。

然而如果同时操作的表不在一个库就操蛋了……所以去 tm 的事务,听天由命吧,大不了表里面多几条废数据,用什么事务!我不用了

众多 O'Reilly 技术书籍的译者「马晶慧」到底是谁?

Posted: 01 Sep 2021 04:31 AM PDT

此人翻译的技术书籍的领域跨度非常大,从数据库到 Kubernetes,从移动应用开发到深度学习。非常的吓人,感兴趣者可以在各大电商平台搜索「马晶慧」。

网关统一鉴权+SSO 单点登录的架构中,网关是 SSO Client 吗?

Posted: 01 Sep 2021 04:30 AM PDT

目前项目的架构是
有一个登录服务,生成 token 写入 redis
然后有几个 web 应用,每个 web 应用都需要调用登录服务登录后,带上 token 调用其他服务
想要改造成 SSO 单点登录,实现网关鉴权+日志等功能

目前我找到的两篇文章有
微服务-API 网关-身份验证 架构图 多模块 web 系统登录设计 架构图

这种架构中如果认证服务器颁发 ticket 后,是网关来根据 ticket 登录,也就是 SSO Client?

大厂的对象存储都是基于什么实现的呢?

Posted: 01 Sep 2021 04:29 AM PDT

腾讯云 COS,阿里云 OSS,HW OBS 这些对象存储服务是独立自主实现的,还是基于什么开源项目(比如 :MinIO )实现的呢?

求 review 下最近写的网络库

Posted: 01 Sep 2021 04:27 AM PDT

基于 epoll 封装了个服务端,解析 protobuf 消息并处理,还在初级阶段,不过球大神帮忙 review

传送门 https://github.com/boyxiaolong/epoll_socket

技术总监,找前端工作被拒

Posted: 01 Sep 2021 03:58 AM PDT

今天面试了一家外企前端,技术面被拒绝,两位 interviewer 给出如下评价:

  1. English is average, can be working language;
  2. Has a wide range of working experiences on front-end, back-end, Android and iOS;
  3. Lack of technical details of javascript and front-end framework;
  4. Considing his working experience, no deep understanding for tech stack

结论:Reject

对方得出结论 3 的原因之一,可能是我在介绍过往项目时,聊 high 了,花了大量篇幅把后端构架也介绍一遍,连负载均衡都聊了,后端介绍的篇幅占比达 70%左右,以至于对方可能怀疑我前端过于薄弱,刻意避重就轻(猜测);而且,这是前端岗位面试,理应把大部分篇幅花在前端的细节上(失策)。原因之二,我确实在前端方面没有足够深入和扎实。

我的技术栈比较杂,横跨前后端以及 App 端;前端横跨原生、普通的 JQuery 、VUE 等框架以及 webpack ;后端横跨 java 、nodejs 、php,好处是带团队跟各个岗位都能沟通到技术细节,缺点是,没有任何一个具体分支达到"精通"的程度。这可能也是长期做技术总监岗位的代价。

这次技术面试,问了这样几个问题:

  1. tcp 三次握手
  2. fetch 跨域请求时,第一次返回的状态码是什么?
  3. 防抖
  4. 截流(也有可能是问节流,视频通话,没完全听清楚)
  5. 前端框架的 3 种设计模式
  6. css 如何清除 float
  7. ES6 和 ES5 的一些细节差异
  8. http 缓存
  9. https
  10. 浏览器输入网址到整个网页完整加载,整个过程经历了什么?

中英文都聊了,整个过程持续了 36 分钟

花了一下午写简历,老哥们给点修改意见.两年经验, Java 岗

Posted: 01 Sep 2021 03:53 AM PDT

base64: aHR0cHM6Ly9pbWd0dS5jb20vaS9oQllwRzk=

建表的时候字段注释

Posted: 01 Sep 2021 03:51 AM PDT

各位大哥们,你们建表的时候字段加 comment 吗?

结构不固定的 json 值要怎么反序列化成对象比较好?

Posted: 01 Sep 2021 02:57 AM PDT

json 里面有互斥的字段,要怎么序列化成对象?

比如下面的例子里,要么只有refund字段,要么只有purchase,而且两个字段里的结构是不一样的。

{     "id": "1234567890",     "amount": 100,     "refund": {         "date": "2021-04-23T18:25:43.511Z",         "confirmed": true,         "refund_id": 1234456     } }  {     "id": "1234567890",     "amount": 100,     "purchase": {         "date": "2021-04-23T18:25:43.511Z",         "purchase_id": 789621     } } 

现在到的最粗暴的办法,是把每个字段都塞进对象。但这太难看了,而且容易造成混乱。

这种结构下,要怎么设计对象的结构比较好?

谷歌云(任播)是不是拒绝被自己判断成中国国内的 ip 地址的访问?

Posted: 01 Sep 2021 02:48 AM PDT

我的香港主机被谷歌错判成国内 ip 地址,访问小红书网站时,小红书的图片 url 地址 https://ci.xiaohongshu.com/5c6dec9a-8e4b-41f0-960b-0ae9493ea700 显示图片显示错误,任何此域名下的图片均如此,换成别的香港 ip 地址来访问则能正常显示,ci.xiaohongshu.com 这个域名在境外均被解析到谷歌任播云地址 34.120.19.185 ,请问,这个故障是否谷歌的锅?

各位大佬,帮忙看一下这段代码是什么原理让 go 保持后台运行的

Posted: 01 Sep 2021 02:13 AM PDT

需要做一个服务在后台运行,又不想使用第三方进程管理工具,在网上找到一段代码,试了一下可以后台运行,不明白原理

package main  import ( 	"log" 	"os" 	"os/exec" 	"strconv" 	"time" )  func main() { 	args := os.Args 	daemon := false 	for k, v := range args { 		if v == "-d" { 			daemon = true 			args[k] = "" 		} 	}  	if daemon { 		Daemonize(args...) 		return 	}  	file, err := os.OpenFile("test.txt", os.O_CREATE|os.O_RDWR, 0664)  	if err != nil {  		log.Println(err)  		return 	}  	defer file.Close() 	for {  		file.Write([]byte(strconv.Itoa((int)(time.Now().Unix())) + "\n"))  		time.Sleep(time.Second * 1) 	} }  func Daemonize(args ...string) { 	var arg []string 	if len(args) > 1 { 		arg = args[1:] 	} 	cmd := exec.Command(args[0], arg...) 	cmd.Env = os.Environ() 	cmd.Start() } 

后台运行 ./mian -d

长沙 Python web 环境

Posted: 01 Sep 2021 01:49 AM PDT

感觉长沙做 python 的基本上是爬虫,没什么大公司使用 python 做 web 开发

问一下 Linux 环境下 rdp 连接 Windows 的问题。求各位大佬指点

Posted: 01 Sep 2021 01:32 AM PDT

公司的生产数据库只能通过远程 Windows,然后在 Windows 上面操作。 但是我用 Linux 怎么都连不上,网上搜了一下好像我也搞不定,求各位大佬指点

环境是 Ubuntu 20.04.3 LTS

xfreerdp /u:userName /p:passwd /v:ip:port /relax-order-checks +glyph-cache 

错误与如下:

[15:54:55:804] [3539:3540] [INFO][com.freerdp.core] - freerdp_connect:freerdp_set_last_error_ex resetting error state [15:54:55:805] [3539:3540] [INFO][com.freerdp.client.common.cmdline] - loading channelEx rdpdr [15:54:55:805] [3539:3540] [INFO][com.freerdp.client.common.cmdline] - loading channelEx rdpsnd [15:54:55:805] [3539:3540] [INFO][com.freerdp.client.common.cmdline] - loading channelEx cliprdr [15:54:55:809] [3539:3540] [INFO][com.freerdp.client.x11] - Property 250 does not exist [15:54:55:127] [3539:3540] [INFO][com.freerdp.primitives] - primitives autodetect, using optimized [15:54:55:128] [3539:3540] [INFO][com.freerdp.core] - freerdp_tcp_is_hostname_resolvable:freerdp_set_last_error_ex resetting error state [15:54:55:128] [3539:3540] [INFO][com.freerdp.core] - freerdp_tcp_connect:freerdp_set_last_error_ex resetting error state [15:54:56:348] [3539:3540] [WARN][com.freerdp.crypto] - Certificate verification failure 'unable to get local issuer certificate (20)' at stack position 0 [15:54:56:348] [3539:3540] [WARN][com.freerdp.crypto] - CN = BAOLEIJI [15:54:57:279] [3539:3540] [INFO][com.freerdp.gdi] - Local framebuffer format  PIXEL_FORMAT_BGRX32 [15:54:57:279] [3539:3540] [INFO][com.freerdp.gdi] - Remote framebuffer format PIXEL_FORMAT_RGB16 [15:54:57:492] [3539:3540] [INFO][com.winpr.clipboard] - initialized POSIX local file subsystem [15:54:57:494] [3539:3540] [INFO][com.freerdp.channels.rdpsnd.client] - [static] Loaded fake backend for rdpsnd [15:54:57:514] [3539:3540] [ERROR][com.freerdp.core.update] - SECONDARY ORDER [0x03] Cache Glyph failed [15:54:57:514] [3539:3540] [ERROR][com.freerdp.core.update] - order flags 03 failed [15:54:57:514] [3539:3540] [ERROR][com.freerdp.core.update] - update_recv_order() failed [15:54:57:514] [3539:3540] [ERROR][com.freerdp.core.update] - UPDATE_TYPE Orders [0] failed [15:54:57:514] [3539:3540] [ERROR][com.freerdp.core.rdp] - DATA_PDU_TYPE_UPDATE - update_recv() failed [15:54:57:514] [3539:3540] [ERROR][com.freerdp.core.transport] - transport_check_fds: transport->ReceiveCallback() - -1 [15:54:57:514] [3539:3540] [ERROR][com.freerdp.core] - freerdp_check_fds() failed - 0 [15:54:57:514] [3539:3540] [INFO][com.freerdp.client.common] - Network disconnect! [15:54:57:514] [3539:3540] [ERROR][com.freerdp.client.x11] - Failed to check FreeRDP file descriptor 

😮‍💨连接个远程真难啊,求各位大佬指导指导

使用 onload 给改边图片宽高无效

Posted: 01 Sep 2021 01:27 AM PDT

 async function setLatexSize(arr_latexImg, fontSize) {         for (let i = 0;i< arr_latexImg.length;i++){             let newImg = new Image()             newImg.src = arr_latexImg[i].src             await new Promise((resolve) => {                 newImg.onload = function() {                     arr_latexImg[i].height = fontSize * newImg.height / 16                     arr_latexImg[i].width = fontSize * newImg.width / 16                     arr_latexImg[i].setAttribute('width', fontSize * newImg.width / 16);                     arr_latexImg[i].setAttribute('height', fontSize * newImg.height / 16);                     resolve()                 }             })         }     }  

我想跟踪字号的改变来设置图片的宽高,通过 for 循环遍历每一个 img 元素,之后通过 onload 里面来设置 img 元素的宽高,但是现在的问题是当我 console 出arr_latexImg[i]的时候,他标签上面是有宽高属性的,但是我页面中的元素本身依旧是原来的样子,没有变化

img

img

上面是页面中的元素标签,下面的图是我在 console 中显示的arr_latexImg[0]arr_latexImg[0]中的属性是设置上了,但是元素本身依旧没有, arr_latexImg这个数组是通过 jq 获取元素,完了 each 一个新的数组,r 这个数组就是给我传的arr_latexImg,下面是压缩后的代码。我想知道目前的问题是在哪块,是我方法哪块写的有问题吗

t = $("div.table").children().find("img.hex-exe-img"),                         r = [];                         $.each(t, function(e, n) {                             r.push(t[e])                         }),   

大家有杀软综合症吗?

Posted: 01 Sep 2021 01:15 AM PDT

目前用的是卡巴斯基,两年前入了正版。

不知道是不是自己安全习惯好,卡巴斯基的存在感很低,很少报警,也从来没管过。

觉得一个杀软,用一两个月就腻了,想换其他的。

国产的又觉得拉跨,比如 360 杀毒和火绒吧,免杀很容易就过了。

朋友护网的时候,曾经发过木马给测试,卡巴也过了。

不知道现在杀软存在的意义,现在用 shellcode 免杀,很容易就绕过了。

感觉杀软只是防勒索?

Windows11 将于 10 月 5 日上市

Posted: 01 Sep 2021 12:52 AM PDT

RBAC 模型如何定义权限,以及处理的时机?

Posted: 01 Sep 2021 12:49 AM PDT

目前用 golang 的 casbin 库来实现 RBAC 模型做基本的权限控制。有几下几点:

  1. 如果需要一个超级管理员,就是那种不能创建不能删除的、有所有权限的用户,这个用户的权限操作怎么能合并入普通角色的处理逻辑中呢?比如现在创建一个用户,我就是直接判断如果他的角色是超级管理员就不允许创建。但是感觉这种方式有点 hard code 的感觉。
  2. 权限的粒度。比如修改自己的密码和修改别人的密码这种请求肯定是不同的权限操作。但是这种权限的判断如果放在业务逻辑代码中是否侵入性会过强?

Android 封装工具类问题,请求大佬解答

Posted: 01 Sep 2021 12:40 AM PDT

项目需要做一个简单的离线中文语音朗读功能,我参照 https://www.jianshu.com/p/fb48df91fddf?from=singlemessage 封装了一个工具类,可以 onClick 方法里调用 play 方法实现播放。 我现在想实现进入 Activity 自动播放语音,所以在 onStart 方法里调用 play 方法,发现播放不了,必须先在 onEvent 方法里完成初始化。

剧情卡牌类游戏 -let's do it.

Posted: 01 Sep 2021 12:25 AM PDT

最近有些关于游戏 APP 的想法,之前有款乙女类的剧情卡牌游戏恋与制作人非常火。 看了下这个游戏的剧情和制作,感觉从故事的角度来说,还是比较简单的,整个的游戏制作的画风偏少女类, 而且氪金属性非常严重,个人感觉不是很良好。 所以我想制作一款类似的这种乙女类的游戏,现在脑子里面有些初步的剧情和故事主线,具体故事中的人物设计和原画这些可以拜托我的一位好朋友,他是做漫画的,所以原画这块可以根据我们剧情的需要来制作。 比较缺的是游戏 APP 本身的制作,我对这块不熟悉,所以求行业内的大佬,一起开发或者是制作。 同时如果有愿意接这个外包的同学,请大胆联系我。

Swift 调用系统命令

Posted: 31 Aug 2021 11:51 PM PDT

Swift 调用系统命令, https://github.com/QiuZhiFei/swift-commands

Commands模块,使用系统命令字符串,并返回标准输出。

API documentation can be found here.

Usage

import Commands 

Bash

Execute shell commands.

let result = Commands.Task.run("bash -c ls") 

Or

let result = Commands.Bash.run("ls") 

Python

Execute python scripts.

let result = Commands.Task.run("python main.py") 

Execute python commands.

let result = Commands.Task.run("python -c import base64; print(base64.b64encode('qiuzhifei').decode('ascii'))") 

Or

let result = Commands.Python.run("import base64; print(base64.b64encode('qiuzhifei').decode('ascii'))") 

Ruby

Execute ruby scripts.

let result = Commands.Task.run("ruby main.rb") 

Execute ruby commands.

let result = Commands.Task.run("ruby -e require 'base64'; puts Base64.encode64('qiuzhifei')") 

Or

let result = Commands.Ruby.run("require 'base64'; puts Base64.encode64('qiuzhifei')") 

Alias

Create a shortcut name for a command.

let node = Commands.Alias("/usr/local/bin/node", dashc: "-e") let result = node.run("console.log('qiuzhifei')") 

Setting global environment variables

Commands.ENV.global["http_proxy"] = "http://127.0.0.1:7890" 
Commands.ENV.global.add(PATH: "/Users/zhifeiqiu/.rvm/bin") 

Making Commands

let request: Commands.Request = "ruby -v"  let result = Commands.Task.run(request) 

Or

let request = Commands.Request(executableURL: "ruby", arguments: "-v")  let result = Commands.Task.run(request) 

Change environment variables

var request: Commands.Request = "ruby -v" request.environment?.add(PATH: "/usr/local/bin") request.environment?["http_proxy"] = "http://127.0.0.1:7890" request.environment?["https_proxy"] = "http://127.0.0.1:7890" request.environment?["all_proxy"] = "socks5://127.0.0.1:7890"  let result = Commands.Task.run(request) 

Result Handler

Returns the Commands.Result of running cmd in a subprocess.

let result = Commands.Task.run("ruby -v") switch result { case .Success(let request, let response):   debugPrint("command: \(request.absoluteCommand), success output: \(response.output)") case .Failure(let request, let response):   debugPrint("command: \(request.absoluteCommand), failure output: \(response.errorOutput)") } 

Adding Commands as a Dependency

To use the Commands library in a SwiftPM project, add the following line to the dependencies in your Package.swift file:

let package = Package(     // name, platforms, products, etc.     dependencies: [         .package(url: "https://github.com/qiuzhifei/swift-commands", from: "0.5.0"),         // other dependencies     ],     targets: [         .target(name: "<command-line-tool>", dependencies: [             .product(name: "Commands", package: "swift-commands"),         ]),         // other targets     ] ) 

CocoaPods (OS X 10.9+)

You can use CocoaPods to install Commands by adding it to your Podfile:

pod 'Commands',        '~> 0.5.0' 

QuickStart

git clone https://github.com/QiuZhiFei/swift-commands cd swift-commands && open Package.swift 

References

求教有没有这种开源系统,各种终端 ios,安卓,电脑可以很方便的在局域网内分享文件?

Posted: 31 Aug 2021 11:31 PM PDT

vscode 对 PHP 函数跳转支持是不是还不够完善,或者有好的插件推荐吗?

Posted: 31 Aug 2021 11:16 PM PDT

目前按照教程配置好了"PHP Intelephense"插件,但是发现有部分函数无法跳转,目前不清楚是 ci 框架问题,还是说对部分方法他就是无法跳转?
目前是拿 CodeIgniter3.X 框架测试的,同样的情况在 sublime 和其他 ide 我试了都可以跳转道函数定义的地方,这块不知有没有解决方法?

56c72b544a4425e3b5e370ed1332f6d.png

群晖升级内存后 docker 资源占用情况显示不准确了

Posted: 31 Aug 2021 09:44 PM PDT

蜗牛 A 款做的黑群晖,之前是 4g 内存,稳定使用两年左右吧

最近抽空把内存从 4g 升级到了 8g, 然后突然发现点击自带 Docker 套件显示 CPU 和内存使用率那个地方,不准确了

具体的表现是: 某个特定的容器内存占用比较大(根据下方的运行容器处的显示, 如果这里准确的话),日常大概占用 3-7 个 G 左右的内存, 但是最上面显示的总的[内存使用率]只有不到 2G, 有时候甚至更低几百 M 的样子, 很明显的统计错误, 逼死强迫症啊.在命令行中, 使用

docker stats 

命令查看,得到的数值也和这里没有接近的地方,看起来还是这个特定镜像的资源占用情况不是很准确.

有遇到这种情况的 v 友吗? 感觉一切是发生在更换内存条之后. 之前使用 4g 内存条的时候, 粗看那个统计大概还是准确的.

iShot2021-09-01 08.42.55.png iShot2021-09-01 08.56.23.png

感觉前途迷茫

Posted: 31 Aug 2021 09:22 PM PDT

目前在一家小厂做 java 开发,开年想跳到二三线的互联网公司,但是又没有高并发项目的经验,而面试又要求这些,唉,感觉陷入了一个死循环,大佬们能给点建议吗,想进互联网公司还需要些什么技能?

golang 使用 errgroup 停止其他 goroutine

Posted: 31 Aug 2021 09:03 PM PDT

目前的需求是这样的

func main() { 	errg := new(errgroup.Group) 	errg.Go(func() error { 		return test1() 	}) 	errg.Go(func() error { 		return test2() 	}) 	if err := errg.Wait(); err != nil { 		log.Error(err) 	} }  func test1() error { 	return nil }  func test2() error { 	return errors.New("test2 err") } 

我如何控制 go 中的协程 有一个错误,其他 go 协程就不会执行? 同时大家如何控制超时的那? 希望能给个范例

宽带公网 IP,有没有开源的类似 ddns 实现脚本,自动获取 ip,并把 ip 写入到 cloudflare 的 dns 记录里

Posted: 31 Aug 2021 08:19 PM PDT

RT,
有 公网 ip,但 ip 是变化的,有没有 脚本 获取 本机 ppp+ 上的 ip 地址,通过 cloudflare api 修改 dns 记录

子组件怎么知道自己需要提交?

Posted: 31 Aug 2021 07:04 PM PDT

循环子组件,数据通过 props 传递,其中一个编辑完了之后在外面点击提交,怎么拿到子组件的数据? 大概就是这么个情况,想半天没想出来

求合作大神帮编写搬家回收 App

Posted: 31 Aug 2021 01:07 PM PDT

目前有一个想法, 搬家时(搬出)的回收衣服, 家具等, 和搬出的打包, 搬出打扫阿姨(为房东着想), 搬家师傅, 现在这些市场上都是单独的 App. 分别使用这些 App 很麻烦. 搬到新家后又要找搬入打扫阿姨等. 所以想开发一款 App, 包揽了从搬家前的回收, 收拾打扫, 打包, 到搬家司机车辆, 搬家后的打扫, 摆放等的一体式服务.

可能还需要和提供房源的 App 合作. 和这些各类公司分别沟通我可以做, 但不会编写制作 App 也是苦恼, 哭了...
不知是否有大神有兴趣合作, 做个此类的 App ?

关于 Tag 表的设计

Posted: 31 Aug 2021 12:04 PM PDT

看了下 Ecms 的 tag 设计, 查询 tag 关联表中文章 ID,再 while 查询文章信息,为啥不 IN 一起取出来?
我的想法:
文章表,TAG 表,关联表。
文章中不但有 TAG 还能有多个作者。
TAG 和作者是放一起,用字段区分,还是用两个表?
查询某 TAG 、作者的文章并按阅读点赞排序,是不是只能用 JOIN
刚接触 CI,想自己摸索着写写,望大佬解惑。
菜鸡自学,别介意问题奇怪

应用转生的官网是什么呢?

Posted: 31 Aug 2021 10:22 AM PDT

有大佬了解这个东西吗?类似太极的免 ROOT 框架。在 Google 和百度上搜都是一堆莫名其妙的爬虫下载站缓存的 Apk,没看见官网呢?哪怕是作者的 Github 地址?

坚果云跪了?

Posted: 31 Aug 2021 09:08 AM PDT

smart-background 自动生成符号背景的 react 组件,做滚动背景墙非常方便

Posted: 31 Aug 2021 08:21 AM PDT

Smart Background

npm version npm version npm version npm version npm version npm version

An React Component Can Automatically Generate The Background

一个快速生成元素背景的 react 组件

repository-open-graph-template 副本

Repository

https://github.com/yuanguandong/smart-background

Live demo

https://yuanguandong.github.io/smart-background/

Install

npm i smart-background -S 

How to use

import React from 'react'; import Background from 'smart-background'; import { FaLaugh } from 'react-icons/fa';  export default () => {   return (     <div style={styles.container}>       <Background underlayColor="#f00" animation={{ type: 'bottom', speed: 5 }}>         <div style={styles.content}>           <FaLaugh style={styles.icon} />           <h1 style={styles.text}>JUST DO IT</h1>         </div>       </Background>     </div>   ); };  const styles = {   container: { width: '100%', position: 'relative', height: 350 },   content: {     width: '100%',     height: '100%',     display: 'flex',     justifyContent: 'center',     alignItems: 'center',     flexDirection: 'column',   },   icon: { color: '#fff', fontSize: 120 },   text: { color: '#fff', fontSize: 36, fontWeight: 'bold' }, }; 

Props

property description type defaultValue required
symbols 元素 /字符 /符号集合 (string | ReactNode | Element)[ ] ['●'] false
random 符号是否随机生成位置和大小 { fontSizeRange: number[] } | undefined false
underlayColor 底衬颜色 string false
underlayImage 底衬图片 string false
symbolsStyle 符号样式 Object {color: '#000', opacity: '0.3'} false
rotate 符号旋转角度 number 0 false
symbolSize 符号大小 number 90 false
gap 符号间距 number 10 false
animation 滚动动画 {type: 'left' | 'right' | 'top' | 'bottom'; speed: number;} false
exact 精确模式 boolean false false
childrenWrapClassName 子组件容器类名 string false
childrenWrapStyle 子组件容器类名 React.CSSProperties false
感觉以后会用到的就先点个 star 收藏吧!感谢!

No comments:

Post a Comment