日常踩坑记录
本篇文章主要介绍一下最近的开发中用到的些小问题。问题不大,但有些小细节,记录一下,有遇到的朋友可以看一下,有更好的解决方法欢迎分享。
浏览器记住密码自动填充表单
这个问题我在火狐浏览器遇到了。我登录系统时选择了浏览器记住密码;然后在打开新建数据库弹窗,里面的户名和密码竟然自动填充了。设置了autoComplete=“off”,也没有用,这个只是为了关闭输入提示。以下时具体的解决方法,亲测有效
import React from "react";
import { Button, Form, Input } from "antd";const MyForm: React.FC = () => {const [form] = Form.useForm();const onFinish = (values: any) => {console.log("Success:", values);};const onFinishFailed = (errorInfo: any) => {console.log("Failed:", errorInfo);};/** 清空密码 */const resetPass = () => {if (!form.isFieldTouched("password")) {form.setFieldsValue({ password: "" });}};/** 清空用户名 */const resetUser = () => {if (!form.isFieldTouched("username")) {form.setFieldsValue({ username: "" });}};return (<Formname="basic"form={form}labelCol={{ span: 8 }}wrapperCol={{ span: 16 }}initialValues={{ remember: true }}onFinish={onFinish}onFinishFailed={onFinishFailed}autoComplete="off"><Form.Itemlabel="IP"name="ip"rules={[{ required: true, message: "Please input your ip!" }]}><Input /></Form.Item><Form.Itemlabel="Port"name="port"rules={[{ required: true, message: "Please input your port!" }]}><Input /></Form.Item>{/* 用于干扰浏览器记住密码 */}<Form.Item style={{ display: "none" }}><Input onFocus={resetUser}/></Form.Item><Form.Item style={{ display: "none" }}><Input.Password onFocus={resetPass}/></Form.Item><Form.Itemlabel="Username"name="username"rules={[{ required: true, message: "Please input your username!" }]}><Input onFocus={resetUser} /></Form.Item><Form.Itemlabel="Password"name="password"rules={[{ required: true, message: "Please input your password!" }]}><Input.Password onFocus={resetPass} autoComplete="off"/></Form.Item><Form.Item wrapperCol={{ offset: 8, span: 16 }}><Button type="primary" htmlType="submit">Submit</Button></Form.Item></Form>);
};export default MyForm;
具体来说,在代码中添加了两个隐藏的<Form.Item>,一个用于用户名(Input类型),另一个用于密码(Input.Password类型),然后分别在这两个元素的onFocus事件中调用了resetUser和resetPass函数,这两个函数在字段没有被触摸(touched)过的情况下将字段值设置为空字符串。
这样的做法会使浏览器的自动填充机制失效,因为浏览器通常在填充用户凭据之前会检查字段是否为空。这是一种常见的防止浏览器自动填充密码的方法。
不过需要注意的是,浏览器的自动填充机制可能会随着时间的推移而改变,因此这种解决方案可能不是绝对稳定的。不过暂时我的页面没出现问题。
ant Design下拉框,下拉菜单、日历等组件随页面滚动问题
在antd中下拉框组件有很多比如: Select、Dropdown、DatePicker等,在点击后会出现下拉选择框,但是当滚动页面时,会发现下拉框固定不动。
分析:
-
定位问题:某些情况下,组件的定位可能会受到父元素、祖先元素的定位影响。确保你的组件的定位设置正确,可以使用 CSS 的
position、top、left等属性来控制定位。 -
层叠上下文:在 CSS 中,每个元素都位于一个层叠上下文中,层叠上下文可以影响元素的渲染和布局。如果组件的父元素或祖先元素具有不同的层叠上下文属性,可能会导致组件的位置不正确。了解层叠上下文的工作原理,并适当地设置元素的
z-index属性,可以帮助解决这类问题。 -
Fixed 定位:如果你希望组件在页面滚动时保持固定位置,可以考虑使用 CSS 中的
position: fixed。这将使组件相对于浏览器窗口固定位置,而不受页面滚动的影响。
解决方案:
根据官方文档提供的api可以看到,有个getPopupContainer参数,可以改变下拉弹窗的渲染节点。默认是被渲染到body的,所以虽然父容器发生滚动,弹窗位置依旧不动。

import React from 'react';
import { Select } from 'antd';const Option = Select.Option;const Hello = () => (<div style={{ margin: 10, overflow: 'scroll', height: 200 }}><h2>Select in a scrollable area</h2><div style={{ padding: 100, height: 1000, background: '#eee', position: 'relative' }} id="area"><h4>可滚动的区域 / scrollable area</h4><SelectdefaultValue="lucy"style={{ width: 120 }}getPopupContainer={() => document.getElementById('area')!}><Option value="jack">Jack</Option><Option value="lucy">Lucy</Option><Option value="yiminghe">yiminghe</Option></Select></div></div>
);export default Hello;
上面面是官网给的使用例子。就是通过id将下拉弹窗绑定到滚动区域。
这样确实能解决滚动问题,但是在滚动区域的高度或者宽度不够时,下拉弹窗的位置也会发生错位,导致样式不好看。
如果在页面高度和宽度允许的情况下,可以世道调整滚动容器的大小。由于我的下拉框时放在Modal弹窗里,滚动高度是限的,所以我使用了动态改变下拉框的渲染容器,当页面不需要滚动时就挂载到body。滚动就挂载到滚动容器上。
修改上述代码:
import React, { useRef, useState } from "react";
import { Select } from "antd";const Option = Select.Option;const Hello = () => {const conRef = useRef<any>();const [open, setOpen] = useState<boolean>(false); // 每次打开下拉框重新渲染挂载节点/** 动态获取挂载节点 */const getContainer = () => {if (conRef?.current?.scrollHeight > 400) {return conRef?.current;}return document.body;};return (<div style={{ margin: 10, overflow: "scroll", height: 200 }}><h2>Select in a scrollable area</h2><divstyle={{padding: 100,height: 1000,background: "#eee",position: "relative",}}id="area"ref={conRef}key={`${open}`}><h4>可滚动的区域 / scrollable area</h4><SelectdefaultValue="lucy"style={{ width: 120 }}getPopupContainer={() => getContainer()}onDropdownVisibleChange={(e) => setOpen(e)}><Option value="jack">Jack</Option><Option value="lucy">Lucy</Option><Option value="yiminghe">yiminghe</Option></Select></div></div>);
};export default Hello;
在下拉框打开时,根据滚动区域的高度决定下拉框的渲染容器,以避免下拉框的内容溢出可视区域。key={${open}} 的作用是为了在每次下拉框打开或关闭时触发一个新的 key,从而触发重新渲染。
Table 表格拖拽自适应宽度
当我在实现表格可拖拽列宽度时,有时候表格整体宽度不够时,其他列也会跟着变化。这是因为ant design 会调整列的宽度,为了解决这个问题,可以加个空白列去适应多余宽度。
类似以下代码。
ResizableTable.tsx是我根据react-resizable插件封装的Table组件。需要代码可私聊
import React from 'react';
import ResizableTable from './ResizableTable.tsx';const columns = [{title: 'Name',dataIndex: 'name',width: 150,},{title: 'Age',dataIndex: 'age',width: 80,},{title: 'Address',dataIndex: 'address',width: 200,},{title:'', // 用于自适应多余宽度dataIndex:'null'}
];const dataSource = [{key: '1',name: 'John Brown',age: 32,address: 'New York No. 1 Lake Park',},// ...more data
];const App = () => {return <ResizableTable columns={columns} dataSource={dataSource} />;
};export default App;相关文章:
日常踩坑记录
本篇文章主要介绍一下最近的开发中用到的些小问题。问题不大,但有些小细节,记录一下,有遇到的朋友可以看一下,有更好的解决方法欢迎分享。 浏览器记住密码自动填充表单 这个问题我在火狐浏览器遇到了。我登录系统时选择了浏览器…...
threejs特殊几何体(一:文字几何体对象)
threejs中文字几何体通过newTextGeometry()生成,它被单独作为一个类存在于threejs中const txtGeo new TextGeometry("threejs", { ...opts, font: font }); 我们先看效果: <template><div></div> &…...
链表的实现
本程序List链表用两种方式实现,一种是双向链表,一种是双向循环链表。循环双向链表和双向链表,它们的编码差别很小;但是循环链表在插入效率上胜出很多,同时查询时候更灵活。综合考虑,循环链表是首选。 另外…...
c++ std::mutex与std::condition_variable
1. std::mutex lock()加锁; try_lock()尝试加锁; unlock()解锁; std::mutex m_mutex; m_mutex.lock(); ... m_mutex.unlock(); 2. std::lock_guard 类模板;等同自动锁,直接取代lock()和unlock(); 构造时加锁,析构时解锁; std::mutex m_mutex; {std::lock_guard<std:…...
Aspose.Tasks for .NET V23Crack
Aspose.Tasks for .NET V23Crack 改进了大型项目的内存占用。 添加了API,允许您在应用程序无法访问系统字体文件夹时指定用户的字体文件夹。 Aspose.Tasksfor.NET是处理MicrosoftProject文件的可靠的项目管理API。API支持在不依赖Microsoft Project的情况下读取、写…...
vue过渡及动画
文章目录 前言类名使用自己定义动画样式多个元素过渡使用第三方库 前言 对于vue中的过渡与动画,官网上是这样概述的: Vue 在插入、更新或者移除 DOM 时,提供多种不同方式的应用过渡效果。包括以下工具: 在 CSS 过渡和动画中自动…...
Linux环境下SVN服务器的搭建与公网访问:使用cpolar端口映射的实现方法
文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…...
【ubuntu】 DNS 设置工具 resolvectl
什么是 resolvectl “resolvectl” 是一个用于管理系统 DNS 解析配置的命令行工具。它是 systemd-resolved 服务的一部分,该服务是在许多基于 Systemd 的 Linux 发行版中用于管理网络配置和 DNS 解析的系统服务。 通过 resolvectl 命令,可以查看当前系…...
Keepalived+Lvs(dr)调度器主备配置小实验
目录 前言 一、实验拓扑图 二、配置LVS(dr)模式 三、配置调配器热备 四、测试 总结 前言 Keepalived和LVS(Linux Virtual Server)是两个常用的开源软件,通常结合使用以提供高可用性和负载均衡的解决方案。 Keepalive…...
第四讲Java基本语法——数组结构(多维数组)
前言 前面几讲,我们讲了Java基本语法,初学者也能够有一定的入门。本讲,我们也是继续来讲解一下Java另一个基础语法——数组,其实在前面讲解数据类型的时候,我们也有提到数组是引用类型,那今天我们就来分析一下什么是数组,怎么用数组呢? 一、数组是什么 数组是…...
【题解】JZOJ6578 / 洛谷P5201[USACO2019Jan]Shortcut G
洛谷 P5201 [USACO19JAN] Shortcut G 题意 在一个带权无向连通图上,每个点有 a i a_i ai 只奶牛,奶牛会走最短路径到 1 1 1,如果有多条路径,选择字典序最小的,定义移动总时间为所有奶牛走到 1 1 1 的时间之和。…...
npm install sentry-cli失败的问题
1. 目前报错 2. 终端运行 npm set ENTRYCLI_CDNURLhttps://cdn.npm.taobao.org/dist/sentry-cli npm set sentrycli_cdnurlhttps://cdn.npm.taobao.org/dist/sentry-cli3. 再安装 npx sentry/wizardlatest -i nextjs即可成功...
Node opensslErrorStack 错误解决方法记录
从Git仓库中下载了一个老项目,使用npm install 安装后没有问题,当我使用npm run dev 的时候遇到了 OpenSSL 相关错误,例如 opensslErrorStack: [error:03000086:digital envelope routines::initialization error] 网上找了一下相关信息&am…...
你知道什么是Grandmillennial风格吗,进来看看吧
如果你既欣赏祖母的印花棉布扶手椅和大胆的图案,又喜欢千禧一代朋友现代家居中的开放空间和时尚家具,那么 "千禧一代 “风格就是为你量身打造的。它借鉴了几十年来的流行趋势,形成了一种独特的、带有现代风格的老式设计。 在典型的 &quo…...
App Inventor 2 开发 ChatGPT 对话App
ChatGPT大家应该不会陌生,它的回答内容非常的专业及深入,具有实际的可指导性。我们通过App Inventor 2开发一个简单的对话App,先看效果: App Inventor 2 ChatGPT教育领域对话演示 代码块如下: 用到的核心组件“ChatBot…...
SQL 大小敏感问题
在SQL中,关键字和函数名 是不区分 大小写的 比如(select、where、order by 、group by update 等关键字),以及函数(ABS、MOD、round、min等) window系统默认是大小写不敏感 (ZEN文件和zen 文件 不能同时存在ÿ…...
微信小程序+Taro 混编,Taro 使用微信原生 behaviors
最近有一个小程序项目,因为一些原因项目架构选择了微信小程序原生Taro 混编的方式进行开发,在开发的过程中发现 Taro 不支持使用原生的 behaviors 特性,因为混编的原因项目当中已有原生页面在使用 behaviors,所以需要一个方案在不…...
b树/b+树、时间轮、跳表、LSM-Tree
b树、b树:关系型数据库核心存储结构 1、为什么磁盘数据存储结构用B树、而不用红黑树 磁盘每次读取不是读一个节点、是返回一页数据。 红黑树每次遍历一个节点排除一半数据。 B树通常映射相邻的磁盘页数据。4K mysql索引一个节点隐射16k故而映射4倍,故…...
Unity OnDrawGizmos的简单应用 绘制圆形
编辑器和配置表各有各的好。 卡牌游戏即使再复杂,哪怕是梦幻西游,大话西游那种,甚至wow那种,用配表都完全没问题。但是崩坏3,或者鬼泣,格斗游戏,可视化编辑器是唯一的选择。 开发初期刚开始配技…...
Uniapp笔记(四)uniapp语法3
一、商品详情 1、从商品列表页跳转到商品详情页 在商品列表的项中绑定单击事件,并传递商品id值 <view class"goods-item" v-for"(item,index) in goodsList" :key"index" click"goGoodsDetail(item.goods_id)"> &…...
万象视界灵坛实操手册:使用Prometheus+Grafana监控CLIP推理延迟、GPU利用率、QPS指标
万象视界灵坛实操手册:使用PrometheusGrafana监控CLIP推理延迟、GPU利用率、QPS指标 1. 监控系统概述 在现代AI应用部署中,实时监控系统性能指标是确保服务稳定运行的关键。对于万象视界灵坛这样的多模态智能感知平台,我们需要重点关注三个…...
自动驾驶商业化落地:商业模式与法规体系双轮驱动
目录 一、自动驾驶分级与商业逻辑差异 二、商业模式:不同等级的盈利路径 1. L3 乘用车:成本与合规的平衡 2. L4 运营场景:替代人力的正向现金流 3. L5:社会价值驱动,商业仍待探索 三、法规核心难点:责…...
AI数字遗产:OpenClaw+Gemma-3-12b-it自动化整理与加密个人数据
AI数字遗产:OpenClawGemma-3-12b-it自动化整理与加密个人数据 1. 当技术遇上数字永生:一个程序员的私人实验 三年前祖母离世时,我在整理她的遗物时发现了一个装满老照片的饼干盒。那些褪色的相纸背后用铅笔写着模糊的日期和人名,…...
Laravel Stats Tracker设备检测技术解析:精准识别移动端与桌面端
Laravel Stats Tracker设备检测技术解析:精准识别移动端与桌面端 【免费下载链接】tracker Laravel Stats Tracker 项目地址: https://gitcode.com/gh_mirrors/tr/tracker Laravel Stats Tracker是一款强大的Laravel统计跟踪工具,它提供了精准的设…...
探索高压柔性输电系统中6脉冲与12脉冲晶闸管控制HVDC仿真模型
高压柔性输电系统6脉冲,12脉冲晶闸管控制HVDC的仿真模型,说明文档在电力传输领域,高压柔性输电系统(HVDC)以其高效、灵活等特性占据着重要地位。其中,6脉冲和12脉冲晶闸管控制的HVDC仿真模型更是关键部分&a…...
0基础入门网络安全必练这两个靶场!挖漏洞必先从刷靶场开始
0基础入门网络安全必练这两个靶场!挖漏洞必先从刷靶场开始 第一「皮卡丘」 它是国内几个安全大佬专门给小白开发的中文靶场,界面非常简洁而且操作友好,真的也算是我刚入门时候的一个实战老师 和其他靶场不同,它既可以动手练习还…...
JAVA语法,接口和抽象类应该如何抉择
01.面向对象设计特性1.1 抽象和接口特性在面向对象编程中,抽象类和接口是两个经常被用到的语法概念,是面向对象四大特性,以及很多设计模式、设计思想、设计原则编程实现的基础。比如,我们可以使用接口来实现面向对象的抽象特性、多…...
别再只用Chat了!深度挖掘Cursor的‘规则’与‘上下文’功能,打造你的专属AI编程助手
解锁Cursor的隐藏力量:从代码助手到项目级智能架构师 在AI编程工具爆发的时代,大多数开发者仅仅停留在基础对话和代码补全的层面。但Cursor的真正价值远不止于此——它能够成为你项目架构的智能协作者、团队规范的自动化执行者,以及复杂工程问…...
【OpenCore Configurator】:解决黑苹果配置难题的智能化解决方案
【OpenCore Configurator】:解决黑苹果配置难题的智能化解决方案 【免费下载链接】OpenCore-Configurator A configurator for the OpenCore Bootloader 项目地址: https://gitcode.com/gh_mirrors/op/OpenCore-Configurator OpenCore Configurator作为一款针…...
遥感小白看过来!无需编程5分钟搞定Landsat8数据下载(2023最新版)
零代码获取Landsat8遥感数据的完整指南(2023实战版) 当第一次接触遥感数据时,许多非技术背景的研究者常被复杂的下载流程吓退。其实,获取Landsat8卫星影像完全可以像网购一样简单——不需要编写任何代码,甚至不需要理解…...
