三种隐藏节点的方法对比:display:none 不删除dom节点,仅仅是取消元素的站位 visbility:hidden 不删除节点也不取消站位 React 中的 {visible && <div>嘻嘻嘻</div>} 这个 visible 的 Boolean 值决定了节点是否渲染在 dom 树上
6
e.stopPropagation()->将本节点的冒泡时间遏制,不再继续上传。 e.preventDefault()->阻止默认事件,如 链接点击必然跳转,表单点击必然提交。阻止之后点击链接不再跳转,点击表单提交不再提交。
评论
onContextMenu={(e: React.MouseEvent<HTMLDivElement, MouseEvent>) => { /**onContextMenu 加在哪个节点上,e.currentTarget就是谁;触发右键点击事件的元素是谁 *e.target 就是谁 */ console.log('菜单右键点击事件', e.target, e.currentTarget); }}
展开
评论
有没有大神可以解释一下这个getValue的两个泛型 T 和 K 为什么在调用函数的时候没有传入?
我不是口袋袋于2021-10-14 18:41发布的图片
6
/**TS 中 infer */ type a<T> = T extends (a:infer R) => infer R ? R : string; /**number 不符合 (a:infer R) => infer R 这种格式 所以返回的是 string */ const x: a<number> = '123' /**(arg: number) => string 不符合 (a:infer R) => infer R 的格式,因为参数 arg 和返回值不是同一种类型 */ const y: a<(arg: number) => string> = '123' /**完美符合 (a:infer R) => infer R 的格式 所以返回的是 R ,那么 R 是什么类型呢? R 就是我传的函数中 arg 的类型 number */ const z: a<(arg: number) => number> = 123 /**同上 */ const w: a<(arg: string[]) => string[]> = ['xixi'] /**TS中 Omit */ interface TypeA { name: string; age: number; } /**从一个接口中剔除这个接口的一些键,然后返回一个新的接口 */ type withOutAge = Omit<TypeA, 'age'> /**TS中的 keyof 返回一个接口的所有键组成的一个枚举类型*/ interface TypeB { name: string; age: number; school: string; } type KeyOfTypeB = keyof TypeB; const m: KeyOfTypeB = 'name';
展开
2
extends 在泛型中的使用/**当我们在一个接口中使用泛型T并且希望这个T是一个我们限定的类型, * 而不是让使用这个接口的用户随便传入的时候, * 可以用 extends 一个枚举类型,这样这个范型的取值范围就被限制在这个枚举类型中 */ interface projectDetail<T extends string | number> { name: string; age: T; } const obj: projectDetail<number> = { name: 'Jack', age: 19 }
展开
评论
新发现npm包 classnames 有了他之后通过变量控制样式变得简单了许多! 例如:className={classNames('diy', {'diy2':isShow})} 括号中的 diy 是永远生效的,但是 diy2 会根据 isShow 的真假来决定是否生效。如果 diy2 的样式和 diy 的样式冲突的话,会按照 diy2 来生效。原因如下:用变量控制的样式的优先级高于用常量控制的样式的优先级,就算是把 diy2 放在diy 前面,样式冲突时,也是使用 diy2 的样式,和顺序是没有关系的。
展开
4
赞了这篇沸点
有没有那么一首歌,会让你轻轻跟着和。
7
有没有大佬解释一下这个debounce函数为啥返回的是一个匿名函数,这段代码的功能是防抖
我不是口袋袋于2021-07-22 10:28发布的图片
4
分享一个快速判断JS的对象到底是object还是数组还是函数的方法 function sum(){ } let arr = [1,2] let obj = {a:1} console.log(Object.prototype.toString.call(sum))//[object Function] console.log(Object.prototype.toString.call(arr))//[object Array] console.log(Object.prototype.toString.call(obj))//[object Object]
展开
6
求大神指点! 这是一段手动实现JS中的call()函数的代码,写完之后发现会给传入call() 函数的对象(截图中的obj对象)添加一个额外的属性,这是属性就是调用call()函数的那个函数。不知道怎么改进,感觉额外添加属性并不是太好。
我不是口袋袋于2021-07-21 11:26发布的图片
5
css清除浮动方法小结 一下方法是针对子元素浮动,导致父元素高度塌陷的问题 首先要明确一点,子元素浮动会导致两个塌陷,一个是父元素内部的塌陷,就是其他子元素占用了浮动子元素的位置。另外一个塌陷是因为父元素没有设置高度,导致父元素同级的元素占用了父元素的位置。 ①给父元素加上{overflow: hidden;*zoom:1};这种方法会解决父元素高度塌陷问题。也就是说和父元素同级的元素不会受父元素内子元素的影响。但是父元素内部的子元素直接还是会受某个子元素浮动的影响。 ②.father::after{content: '';display: block;clear: both;}这种方法解决的问题与方法一解决的问题是一样的 ③如果要解决父元素内部的子元素高度塌陷的问题,那么可以在浮动的子元素后面加上一个div 设置这个div的样式clear:both;这样其余的子元素就不会占用浮动的子元素的原来的位置。
展开
评论
css盲点总结 ①当我们对父元素设置display: flex;时,子元素如果不指定高度那么默认就是父元素的高度 如果对子元素设置align-items: center;height:100px;那么子元素就为100px 在父元素内垂直居中 ②当我们在父元素没有用flex布局的时候,子元素的高度默认是0,宽度默认是父元素的100% ③flex布局: 设置在容器上的属性:flex-direction + flex-wrap = flex-flow justify-content align-items align-content(针对多行) 设置在项目上的属性:order flex-grow + flex-shrink + flex-basis = flex(默认0 1 auto);auto(1 1 auto)等分放大缩小;none(0 0 auto)不放大不缩小
展开
评论
下一页
个人成就
文章被点赞22
文章被阅读1,364
掘力值35
收藏集
0
关注标签
14
加入于