在V6版本以下,Link标签会有activeStyle属性或者activeClassName属性,这两个属性都可以设置router激活状态时Link的样式,即当前页面为Link所指页面时Link的样式。
但是,在V6中,使用这两个属性会出现报错如图,会提示找不到该方法。
报错
提示说可以把其中的大写改成小写,但是这个方法是错误的,并不能达到我们想要的效果。
解决
在V6中,已经删除了activeStyle属性以及activeClassName属性。官方给出了正确的向Link标签添加激活样式方法,可戳:custom-link-example
关键部分如下:
function CustomLink({ children, to, props }: LinkProps) {
let resolved = useResolvedPath(to);
let match = useMatch({ path: resolvedpathname, end: true });
return (
<div>
<Link
style={{ textDecoration: match "underline" : "none" }}
to={to}
{props}
>
{children}
</Link>
{match && " (active)"}
</div>
);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
实际上就是自定义了一个函数CustomLink,然后通过useResolvedPath和useMatch去引入路径并判断当前页是否是该路径,若是,则match为true,相应的textDecoration赋上了 "underline"值;否则,textDecoration为“none”。
在我的项目中,我将官方代码稍作修改即可
import '/css/stylecss'
import sdulogo from "/img/sdulogopng";
import as React from "react";
import {
Link,
useMatch,
useResolvedPath,
} from "react-router-dom";
export default function Header() {
return(
<header id="header">
<nav id="navbar" className="navbar">
<ul>
{/这里将Link改为CustomLink,其余不变/}
<li><CustomLink to="/">首页</CustomLink></li>
<li><CustomLink to="/canvas">描摹</CustomLink></li>
</ul>
</nav>
</header>
)
}
function CustomLink({ children, to, props }) {
let resolved = useResolvedPath(to);
let match = useMatch({ path: resolvedpathname, end: true });
return (
<div>
{/若当前为激活状态,则link颜色为**,否则不设置颜色/}
<Link
style={{ color: match "#ffc107" : "" }}
to={to}
{props}
>
{children}
</Link>
</div>
);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
要注意几点:
在IDE中引用useResolvedPath和useMatch可能会有灰线提示:“Cannot resolve symbol ‘useMatch’”,不过不会影响实际运行
官方给的代码是TypeScript,我这里写的是JavaScript,没有太大的区别。主要是CustomLink函数的参数从{ children, to, props }: LinkProps改成{ children, to, props },且不需导入LinkProps。这其实是因为TypeScript的函数传递的参数需要指明参数的类型,也就是{ children, to, props }都是LinkProps类型的。
点击阅读全文
Li锂元素核外电子数为3,外围电子构型是2S1,与同周期元素比有较大原子半径和较少的核电荷,故其金属晶体中金属键不牢固,单质的熔、沸点较低,硬度较小。锂是所有金属中最轻的。
化学性质上表现为易失电子,成为Li+, 而Li+的半径远小于同族其他阳离子,锂的化合物具有一定程度的共价性。Li的标准电极电势很低,仅为-3045。这不仅是因为Li是活泼的碱金属,同时还因为Li的原子半径小,易与水分子结合生成水和离子,释放出较多能量。因此Li的失电子倾向很强。
锂的一些反应的化学反应方程式叙述如下:
4 Li + O₂ = 2 Li₂O (反应条件:自发反应,或者加热,或者点燃)(燃烧猛烈)
6 Li + N₂ = 2 Li₃N(反应条件:自发反应,或者加热,或者点燃)
2 Li + S = Li₂S (该反应放出大量热,爆炸!)
2 Li + 2 H₂O = 2 LiOH + H₂↑(现象:锂浮动在水面上,迅速反应,放出氢气)
2 Li + 2 CH₃CH₂OH(乙醇) = 2 CH₃CH₂OLi(乙醇锂) + H₂↑
4 Li + TiCl₄ = Ti + 4 LiCl
2 Li + 2 NH₃(l) = 2 LiNH₂ + H₂↑
你的想法和你的代码有矛盾啊:
点击checkbox之后checkbox是选中状态的,再去执行li的onclick事件checkbox又回到了未选中状态,这是个死循环来的
var ckBtn=documentgetElementById("aaa");ckBtnonclick=function(){
select();//checkbox自带onclick事件,这里相当于执行了两次select()
}
//这就是:点击checkbox去执行li中的onclick事件
想要实现和li的onclick一样的效果,再执行一次select就行了
var ckBtn=documentgetElementById("aaa");ckBtnonclick=function(){
select();
select();
}
第一条规则:
拆分解释:
input、ol都为标签选择器,选择标签名为input和ol的所有标签
:checked,选择勾选状态的元素(input为checkbox的,并且已经勾选)
+为兄弟选择器,代表+两侧的元素是前后紧邻的
整体解释:选择紧邻前面的标签为选中的checkbox(input type=checkbox)的ol标签(选择器选的是ol而不是input)
第二条规则:
拆分解释:
input、ol、li为标签选择器
>子元素选择器,表示>之前的元素是后面元素的父级元素
整体解释:选择被选中的input紧邻的ol元素的子元素li
举例,下面的li会匹配input:checked + ol > li
<input type="checkbox" /><ol>
<li>选择的是这个元素,前提是上面的checkbox已经被勾选了</li>
</ol>
以上就是关于如何添加li的激活状态全部的内容,包括:如何添加li的激活状态、Li锂元素的性质及其反应特征类型(详细)、点击checkbox怎么去执行li中的onclick事件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)