对数字列表或二级block的显示有问题,先放下原文在这里,后续会修复下这个bug(已修复)
使用 <datalist>
实现 <input>
的 autocomplete
为 <input>
标签的 list
属性指定一个 id
,该 id
对应一个包含 <option>
的 <datalist>
标签作为 autocomplete 的数据来源。
https://codesandbox.io/embed/relaxed-forest-kkhd3d?fontsize=14&hidenavigation=1&theme=dark
CSS父选择器 :has()
表单校验通过伪类 :valid
和未通过伪类 :invalid
使用 @property
自定义CSS属性
使用 CSS 语法定义
/* 定义属性 */
@property --my-color {
syntax: '<color>';
inherits: false;
initial-value: #c0ffee;
}
/* 修改属性 */
--my-color: #ffffff;
使用 DOM 语法定义
window.CSS.registerProperty({
name: '--my-color',
syntax: '<color>',
inherits: false,
initialValue: '#c0ffee',
});
React Controlled Input 中的数字输入问题
非预期字符处理:
当 <input>
标签的 type
被设置为 number
时,用户可以输入科学记数法的 e
,一开始尝试在 onChange
事件中将 e
匹配并去除,input
的 value
属性确实显示为 ‘’
,但界面并没有更新。
但其实可输入的非预期字符还要多 ['e', 'E', '+', '-']
解决方法:
const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {
const exceptThisSymbols = ['e', 'E', '+', '-', '.'];
return exceptThisSymbols.includes(e.key) && e.preventDefault();
};
限制小数输入位数:
在 onChange
事件中
const handleInputChange = (e: changeEvnet<HTMLInputElement>) => {
let value = e.target.value;
//...
value = value.replace(/\\D*(\\d*)(\\.?)(\\d{0,2})\\d*/, '$1$2$3');
//...
}
input
标签
<input pattern="[0-9]*.?[0-9]{0,2}" />
onBlur
时去掉末尾的 .
:
当 input
标签为 number
时,末尾的 .
字符并不会被算在 value
中,因此也不会被 state
记录,所以这个 .
就处在一个非法地带。
所以去除它并不能通过简单的更新。而是需要先将值置空,再重新赋值。而且因为 React18 中的更新合并,还需要使用 flushSync
来使两次赋值生效。
const [value,setValue] = useState();
const handleInputBlur = (e: FocusEvent<HTMLInputElement>) => {
let preVal = value;
flushSync(() => {
setValue('');
});
setValue(preVal);
}
git 中的 tag 有什么用
tag 一般被用来标记“版本”,虽然每个 commit 都有自己的消息体,但要找到某个特定的 commit 还是太麻烦了。所以 tag 类似于给特定的 commit 取一个别名。
git tag
git tag [tagname]
git tag [tagname] -d
git cat-file -p [tagname]
如何单独合并某一个 commit
git cherry-pick [commit]
盐酸多西环素 和 盐酸左氧氟沙星
前者是治疗皮肤的,对喉咙有腐蚀性,后者是抗生素,治疗炎症。
名字很像,不要吃错。
offset
属性
CSS3 新增属性 offset
可以让元素沿着指定的路径进行运动。
offset-anchor
:指定元素运动的中心。
offset-position
:指定元素运动的起始位置。
offset-path
: 指定元素在路径上的位置。
offset-distance
: 指定元素在路径上的位置。
offset-rotate
:指定元素运动时的指向。
在 CSS 中单独使用 SVG 中的某个元素
mask: url(foo.svg#id);
mask
属性
使用位图或 SVG 元素为目标元素添加遮罩蒙版,可以指定只显示蒙版部分或截去蒙版部分。
useCallback
搭配 memo
使用
当组件重新渲染时,虽然 useCallback
不会重新执行,但子组件还是会重新渲染。所以使用 React.memo
包裹组件,这样在 useCallback
的返回函数不变的情况下,子组件也不会重新渲染。