首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

鲁迅:世上本只需要一个Modal组件

一个用于将 immer 作为 React hook 来操纵状态 hook。 use-immer 可以将 state 数据 immutable,更新深层嵌套数据更为方便,且有函数编程感觉。...烦不胜烦 modal 在台项目中,对一些列表资源信息CRUD 弹窗是必不可少,所以页面table管理必不可少,且很繁琐,容易混乱。起初我是这样 <ConfigModal ......在使用modal页面,我们只需不断去更新全局记录值,当modal关闭时只需全局记录值置为空即可。这样在当前页面不需要再将烦人众多modal一次次引入,也不需要维护一系列visible。...问题来了,那全局记录值modal呢?...我们自定义了 useActionCallback, 它接收列举所有 modal 函数 fn,fn 根据传入参数确定具体 modal。

1.5K10

使用React hooks处理复杂表单状态数据

表单状态甚至可以具有嵌套信息,例如用户地址信息,它具有子字段,例如address.addressLine1,address.addressLine2等。...但是,现在reducer更新参数如果有函数,则不能基于当前状态计算新状态,因为当前state没有传递给函数作为参数。就像我们在useState一样: ?...useState更新函数可以基于prev参数计算新状态 另外,如何更新嵌套状态address.addressLine1,address.pinCode。...2:对象具有_path和_value属性 - 当使用具有这两个属性对象作为参数,调用更新函数时。我们将此视为一种特殊情况,其中_path表示嵌套字段路径。...immerproduce函数将对象作为其第一个参数进行处理,在我们例子是当前状态,它第二个参数是一个函数,它接收对象草稿副本以进行mutate,无论你在这个函数内修改了什么草稿状态,是在副本上完成

3.3K20

潜心优化,limu终达不可变数据性能之巅

这样设计带来了3大好处: 数据结构透明 limu是当下唯一一个可实时查看草稿数据结构不可变操作库,调试友好。...优化过程 在3.12之前,limu虽然性能已超过immer数倍,但离structura、mutative这些新起不可变数据操作库还有不少差距,故只能把调试友好、比immer快几倍来作为宣传点,如需追求极致速度还是默认推荐了...放置meta 开文我们提到了meta数据隐藏这个点,meta数据记录这当前节点代理对象,父亲、孩子、可触达路径、数据版本号等重要信息,为了让用户不感知到这个数据存在,先后做了2种尝试 symbol藏匿...除了性能优异以外,limu数据是可实时查看,深度展开后就是json而非Proxy,面向调试非常友好,如对性能有极致追求且不考虑非Proxy环境兼容,limu将会是你最佳选择,和immer保持了对等...api设计,有用immerapplyPatches相关api,可实现无感平替。

21110

放弃Redux吧,转投Zustand吧

中间件支持 Zustand 支持大量中间件, Immer、Redux 中间件等,这使得开发者可以根据需要轻松地扩展 Zustand 功能。...此外,Zustand 还提供了一些内置调试功能, useDebugValue 钩子,可以帮助开发者更好地理解状态变化。 7....这个功能对于那些需要持久保存用户操作场景非常有用,比如表单数据、用户偏好设置等。...whitelist: ['theme'], // 只持久化 theme 状态 blacklist: [], // 不持久化任何状态 debug: false, // 是否在控制台输出调试信息...debug: 一个布尔值,如果设置为 true,则会在控制台输出额外调试信息。 自定义持久化中间件 如果你需要更细粒度控制或者想要创建自己持久化逻辑,你可以通过创建自定义中间件来实现。

41010

React 组件优化

工具库 在编写 react + redux 应用时,reducer state 如果是一个引用类型,比如数组或者对象,当往数组 push 新项时,我们必须要克隆一份才行,如果不克隆,react...immer 库就是为了解决这个问题。它是 mbox 库作者另一个作品,与 mobx 一样简单易用。...it"}) draftState[1].done = true }) produce 函数接收原始 state 数据,它会把这个数据深度克隆,然后把克隆后 state 传递给函数,我们在函数里就可以进行...),在使用时,也应设置 type、name 等属性。...") .max(200, "无效年龄") }); 上面的汉字内容都是当验证不通过时,提醒用户信息,这些信息会映射到 ErrorMessage 组件,然后展示出来。

7.2K20

精读《Immer.js》源码

本周精读仓库是 immer。 1 引言 Immer 是最近火起来一个项目,由 Mobx 作者 Mweststrate 研发。...别扭 setState 我们都知道,react 框架,setState 支持函数式写法: this.setState(state => ({ ...state, isShow: true }...生成代理 第一步,也就是将 obj 转为 draft 这一步,为了提高 Immutable 运行效率,我们需要一些额外信息,因此将 obj 封装成一个包含额外信息代理对象: { modified,...getter produce 函数包含了用户 mutable 代码。所以现在入口变成了 getter 与 setter。...同时,如果代码只访问了 draft.a,那么只会在内存生成 draftA 代理,b c 属性因为没有访问,因此不需要浪费资源生成代理 draftB draftC。

62730

使用Immer解决React对象深度更新痛点

复杂对象更新 在组件,工单所有参数都保存在一个对象,像这样 const [formConfig,setFormConfig] = useState( { type: ''...: 我们不得不写很多操作修改以外代码 每深入对象一层,扩展语法后路径也需要再进一层( ...prevState) ,在复制粘贴过程中极易弄错弄丢 由于工单所有参数可配置,组件里面到处都充斥着这样代码...,以及一个修改传入状态函数,在修改状态函数,所有标准JavaScriptAPI都可以用于draft(草稿)对象,然后返回一个新状态,但是原始状态不会受到影响。...setState时候都需要配合使用一次produce函数很冗余,没关系,Immer也有对应React Hook方法 将produce封装到useStateuseImmer import React...Immer使用方法,希望对你有用,当然,如果可以的话不妨点个赞再走呢,这对我很重要。

78641

PHP命令行扩展Readline相关函数学习

因为这个库交互特性,这个功能在你写 Web 程序没多大用处,但是当你写脚本被用在命令行时非常有用。...这一套功能是不是就非常有意思了,我们可以记录客户所有命令操作,不管是安全审查还是事件回放,都非常有用。...,当在交互式命令行模式下,也就是 readline 函数调用时,按下 Tab 键时候,就会进入到这个函数函数。...readline_callback_handler_install() 函数功能是初始化一个 readline 接口,然后终端输出提示信息并立即返回,如果在函数不进行什么操作的话,这个函数就只是输出一个提示就结束了...最后执行结果就是注释内容,大家也可以自己复制下代码后运行调试,只有自己进行过调试才能理解更加深入。 总结 Readline 很强大,而且也是 PHP 默认安装包自带扩展。

1.1K30

35. 精读《dob - 框架实现》

,另一边在这些变量改变后,执行函数。...所以 callback 函数中用到变量被记录了下来,当变量更改时,会触发 new Reaction ,又重新收集一轮依赖,同时执行了 callback。...这样就实现了函数用到变量被改变后,重新执行这个函数,这就是 observe。 为什么依赖追踪只支持同步函数 依赖收集无法得到触发时环境信息。...数据流框架 Debug 分为数据层和 UI 层,顺序是 dob 核心记录 debug 信息 -> dob-devtools 读取再加工,强化 UI 信息。...通过精心定义一系列事件,制造出一个具有生命周期工具库! 在所有 getter setter 节点抛出相关信息,Debug 端订阅这些事件,找到对自己有用记录下来。

55910

npm依赖(类库工具)

date-fns: 时间格式化 day: 时间格式化 decimal: 数字格式化 fastscan: 敏感词过滤 fuzzy: 模糊搜索 globalize: 时间格式化 iconv-lite: 字符编码转换 immer...函数式编程 sugar: 函数集合 tapable: 钩子函数 underscore: 函数集合 utility: 函数集合 validate: 类型验证 voca: 文本格式化 网络 async: 异步...eruda: 移动端调试面板 spy-debugger: 移动端调试面板 vconsole: 移动端调试面板 后端类库工具 命令 clear: 清屏 commander: 命令配置 cross-env...debug: 调试日志 dumper: 节点检查 ndb: Chrome调试 结语 写到最后总结得差不多了,后续如果我想起还有哪些类库工具遗漏,会继续在这篇文章上补全,同时也希望各位倔友对文章里要点进行补充或者提出自己见解...欢迎在下方进行评论或补充喔,喜欢点个赞或收个藏,保证你在开发时用得上。

2.4K20

100 个基本 Python 面试问题第四部分(81-100)

Q-92:列出一些用于调试 Python 程序 PDB 命令? Q-93:调试 Python 程序命令是什么? Q-94:你如何在 Python 监控程序代码流?...Python globals() 函数将当前全局符号表作为字典对象返回。 Python 维护一个符号表来保存有关程序所有必要信息。此信息包括程序使用变量、方法和类名称。...在 Python ,我们可以使用 sys 模块settrace() 方法来设置跟踪挂钩并监视程序内部函数。 您需要定义一个跟踪方法并将其传递给settrace() 函数。...应指定三个参数,如下所示。 import sys def trace_calls(frame, event, arg): # 'call' 事件发生在函数执行之前。...当我们不想要所有结果并希望推迟一段时间时,生成器很有用。 我们可以用生成器代替函数,而不是使用回函数。我们可以在函数内部编写一个循环,做与调相同事情,并将它变成一个生成器。

3.6K31

eBPF 入门开发实践指南二:在 eBPF 中使用 kprobe 监测捕获 unlink 系统调用

,会调用该回函数,用户即可收集所需信息了,同时内核最后还会回到原本正常执行流程。...其中涉及硬件架构相关是CPU异常处理和单步调试技术,前者用于让程序执行流程陷入到用户注册函数中去,而后者则用于单步执行被探测点指令,因此并不是所有的架构均支持,目前kprobes技术已经支持多种架构...结构体触发探测器之前寄存器信息。...因此kprobes可以被用来安装bug修复代码或者注入故障测试代码; kprobes会避免在处理探测点函数时再次调用另一个探测点函数,例如在printk()函数上注册了探测点,则在它函数可能再次调用...因此不论在何种情况下,在函数不要调用会放弃CPU函数(信号量、mutex锁等); kretprobe通过替换返回地址为预定义trampoline地址来实现,因此栈回溯和gcc内嵌函数__builtin_return_address

79520

redux你用对了吗?

,方便开发调试,对实现“撤销”、“重做”这类功能也更加方便。...函数输出和输入值以外其他隐藏信息或状态无关,也和由I/O设备产生外部输出无关。 该函数不能有语义上可观察函数副作用,诸如“触发事件”,使输出设备输出,或更改输出值以外物件内容等。...简单总结一下,如果一个函数返回结果只依赖他参数,并且在执行过程没有副作用,我们就把这个函数定义为纯函数。...,所以它们 title 属性指向对象是不同, 使用一个树状结构来表示对象结构的话,结构如下所示: 共享结构 现在 reducer: reducers: { changeTitleTip...当然,除了 immer 之外,还有别的库也同样能解决我们问题,但是 immer 应该是最简单也是最容易上手一个库之一了。

57630

前端常见面试题--初级版

**盒模型:**CSS盒模型描述了元素如何在页面上呈现,包括内容(content)、内边距(padding)、边框(border)和外边距(margin)。...4.如何解决 JavaScript 地狱(Callback Hell)?5.描述一下 JavaScript 事件冒泡和捕获。...**地狱:**地狱是指嵌套过多函数导致代码难以阅读和维护。可以使用Promise、async/await或事件库(Event Emitter)来避免地狱。...2.如何在 React 实现组件之间通信?3.Angular 依赖注入是如何工作?4.你如何使用 jQuery 选择和操作 DOM?...初始化:使用git init命令在项目目录初始化Git仓库。添加更改:使用git add命令将文件添加到暂存区。提交:使用git commit命令将暂存区更改提交到本地仓库,并添加提交信息

7210
领券