由于activeClassName
属性,我正在尝试使用NavLink构建导航菜单,并且正在使用NavLink实施导航菜单。
但是当我尝试将它们嵌套在一起以创建下拉菜单时,Chrome调试器上会显示警告。
Warning: validateDOMNesting(...): <a> cannot appear as a descendant of <a>.
在开发过程中是否有任何方法可以消除此类警告,或者在保持activeClassName
样式的同时创建NavBar有更好的方法吗?
谢谢。
<NavLink to="/dashboard" activeClassName="Activated">
<div className="dropdown">
<label>Items</label>
<div className="dropdown-content">
<NavLink exact to="/dashboard/Item1" activeClassName="Activated">
Item1
</NavLink>
<NavLink exact to="/dashboard/Item2" activeClassName="Activated">
Item2
</NavLink>
<NavLink exact to="/dashboard/Item3" activeClassName="Activated">
Item3
</NavLink>
</div>
</div>
</NavLink>
编辑于2019-02-20
我已经基于@JupiterAmy的回答创建了一个CodePen,但没有看到期望的结果,您(或某人)可以做一些修改吗?
答案 0 :(得分:0)
Navlink组件本身返回一个定位标记。您可以在devtools中看到自己。这就是您收到此错误的原因。对于嵌套链接,您应该利用v4中引入的react router动态路由。
要实现此目的,您应该有一个父组件,该组件将具有Navlink,该Navlink包含指向您首页的链接。像这样的东西。
const Parent = () => {
return (
<div>
<NavLink
to="/dashboard"
activeClassName="Activated">
GoToDashboard
</NavLink>
</div>
);
}
现在在仪表板组件中,您应该具有嵌套的链接。
const Dashboard = () => {
return (
<div className="dropdown-content">
<NavLink exact to=`${match.url}/item1` activeClassName="Activated">
Item1
</NavLink>
<NavLink exact to=`${match.url}/item2` activeClassName="Activated">
Item2
</NavLink>
<NavLink exact to=`${match.url}/item3` activeClassName="Activated">
Item3
</NavLink>
</div>
);
}
现在,当您从仪表板组件内部单击此链接时,您将按预期获得链接。
/dashboard/item..
答案 1 :(得分:0)
查看以下代码和图像以供参考。
import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter, Switch, Route, NavLink } from 'react-router-dom';
const Root = () => {
return (
<BrowserRouter>
<Parent />
</BrowserRouter>
);
};
const Parent = () => {
return (
<div>
<NavLink className="dropdown"
to="/dashboard"
activeClassName="Activated">
GoToDashboard
</NavLink>
<Route path="/dashboard" component={Dashboard} />
</div>
);
}
const Dashboard = () => {
return (
<div className="dropdown-content">
<NavLink to="/dashboard/item1" activeClassName="Activated">
Item1
</NavLink>
<NavLink to="/dashboard/item2" activeClassName="Activated">
Item2
</NavLink>
<NavLink to="/dashboard/item3" activeClassName="Activated">
Item3
</NavLink>
<Route path="/dashboard/item1" component={Item1} />
<Route path="/dashboard/item2" component={Item2} />
<Route path="/dashboard/item3" component={Item3} />
</div>
);
}
const Item1 = () => {
return (
<div>
<h1>Item1</h1>
</div>
);
}
const Item2 = () => {
return (
<div>
<h1>Item2</h1>
</div>
);
}
const Item3 = () => {
return (
<div>
<h1>Item3</h1>
</div>
);
}
ReactDOM.render(<Root />, document.getElementById('app'));