【发布时间】:2018-09-12 19:47:36
【问题描述】:
我得到了一个非常常见的警告:数组或迭代器中的每个孩子都应该有一个唯一的“key”道具。这通常很容易解决,但在这种情况下,我不可能找出问题的根源。
我的堆栈跟踪:
in hoc (created by Connect(hoc))
in Connect(hoc) (at withTranslation.js:7)
in hoc (at ConnectedProtectedRoutes.js:26)
in Route (at ConnectedProtectedRoutes.js:44)
in ProtectedRoutes (created by Connect(ProtectedRoutes))
withTranslation 组件
export function withTranslation(CMP) {
var hoc = class extends React.Component {
render() {
return <CMP {...this.props} translate={translate} />
}
};
return hoc;
}
ConnectedProtectedRoutes
const ProtectedRoutes = ({ token, authority, location }) => {
var a = [
createRouteWithRequirements(<Login key="1"/>, "/", [], { token, authority }, true),
createRouteWithRequirements(<Login key="2"/>, "/login", [], { token, authority }),
createRouteWithRequirements(<Register key="3"/>, "/register", [], { token, authority })
]
return a
};
const createRouteWithRequirements = (component, url, requirements, injections, exact) => {
return (
<Route //this is -> in Route (at ConnectedProtectedRoutes.js:44)
exact={!!exact}
key={url}
path={url}
render={() => {
if (requirements.includes("token") && !injections.token) {
return <Redirect to="/login" />
}
return component;
}}
/>
);
};
堆栈还在继续,但我猜问题出在某个地方。有什么线索吗?
【问题讨论】:
-
您是否在父组件中渲染任何其他可能具有相同键的内容(例如
key="1")?如果您同时挂载了两个单独的列表,并且某些列表元素具有相同的键,则会出现警告。