为什么我在正确操作时仍然收到“警告:列表中的每个子元素都应该有一个唯一的“key”属性”?
P粉947296325
P粉947296325 2023-08-13 12:08:22
[React讨论组]
<p><br /></p><blockquote> <p>警告:列表中的每个子元素应该有一个唯一的 "key" 属性。</p> <p>请检查 <code>UserSidebar</code> 的渲染方法。请参阅 https://reactjs.org/link/warning-keys 获取更多信息。</p> </blockquote> <p>这是导致上述错误的代码:</p> <pre class="brush:php;toolbar:false;">import React from "react"; import { makeStyles } from "@material-ui/core/styles"; import Drawer from "@material-ui/core/Drawer"; import { Avatar, Button } from "@material-ui/core"; import { CryptoState } from "../CryptoContext"; import { signOut } from "firebase/auth"; import { auth, db } from "../firebase"; import { numberWithCommas } from "./Banner/Carousel"; import { AiFillDelete } from "react-icons/ai"; import { doc, setDoc } from "firebase/firestore"; const useStyles = makeStyles({ container: { width: 350, padding: 25, height: "100%", display: "flex", flexDirection: "column", fontFamily: "monospace", }, profile: { flex: 1, display: "flex", flexDirection: "column", alignItems: "center", gap: "20px", height: "92%", }, logout: { height: "8%", width: "100%", backgroundColor: "#EEBC1D", marginTop: 20, }, picture: { width: 200, height: 200, cursor: "pointer", backgroundColor: "#EEBC1D", objectFit: "contain", }, watchlist: { flex: 1, width: "100%", backgroundColor: "grey", borderRadius: 10, padding: 15, paddingTop: 10, display: "flex", flexDirection: "column", alignItems: "center", gap: 12, overflowY: "scroll", }, coin: { padding: 10, borderRadius: 5, color: "black", width: "100%", display: "flex", justifyContent: "space-between", alignItems: "center", backgroundColor: "#EEBC1D", boxShadow: "0 0 3px black", }, }); export default function UserSidebar() { const classes = useStyles(); const [state, setState] = React.useState({ right: false, }); const { user, setAlert, watchlist, tokens, symbol } = CryptoState(); const toggleDrawer = (anchor, open) =&gt; (event) =&gt; { if ( event.type === "keydown" &amp;&amp; (event.key === "Tab" || event.key === "Shift") ) { return; } setState({ ...state, [anchor]: open }); }; const logOut = () =&gt; { signOut(auth); setAlert({ open: true, type: "success", message: "Logout Successfull!", }); toggleDrawer(); }; const removeFromWatchlist = async (coin) =&gt; { const coinRef = doc(db, "watchlist", user.uid); try { await setDoc( coinRef, { tokens: watchlist.filter((wish) =&gt; wish !== coin?.id) }, { merge: true } ); setAlert({ open: true, message: `${coin.name} Removed from the Watchlist !`, type: "success", }); } catch (error) { setAlert({ open: true, message: error.message, type: "error", }); } }; return ( &lt;div&gt; {["right"].map((anchor) =&gt; ( &lt;React.Fragment key={anchor}&gt; &lt;Avatar onClick={toggleDrawer(anchor, true)} style={{ height: 38, width: 38, marginLeft: 15, cursor: "pointer", backgroundColor: "#EEBC1D", }} src={user.photoURL} alt={user.displayName || user.email} /&gt; &lt;Drawer anchor={anchor} open={state[anchor]} onClose={toggleDrawer(anchor, false)} &gt; &lt;div className={classes.container}&gt; &lt;div className={classes.profile}&gt; &lt;Avatar className={classes.picture} src={user.photoURL} alt={user.displayName || user.email} /&gt; &lt;span style={{ width: "100%", fontSize: 25, textAlign: "center", fontWeight: "bolder", wordWrap: "break-word", }} &gt; {user.displayName || user.email} &lt;/span&gt; &lt;div className={classes.watchlist}&gt; &lt;span style={{ fontSize: 15, textShadow: "0 0 5px black" }}&gt; Watchlist &lt;/span&gt; {tokens.map((coin) =&gt; { if (watchlist.includes(coin.id)) return ( &lt;div key={coin.id} className={classes.coin}&gt; &lt;span&gt;{coin.name}&lt;/span&gt; &lt;span style={{ display: "flex", gap: 8 }}&gt; {symbol}{" "} {numberWithCommas(coin.current_price.toFixed(2))} &lt;AiFillDelete style={{ cursor: "pointer" }} fontSize="16" onClick={() =&gt; removeFromWatchlist(coin)} /&gt; &lt;/span&gt; &lt;/div&gt; ); else return &lt;&gt;&lt;/&gt;; })} &lt;/div&gt; &lt;/div&gt; &lt;Button variant="contained" className={classes.logout} onClick={logOut} &gt; Log Out &lt;/Button&gt; &lt;/div&gt; &lt;/Drawer&gt; &lt;/React.Fragment&gt; ))} &lt;/div&gt; ); }</pre> <p>我已经在需要的地方提供了特定的键,但是我找不到代码中的错误。</p>
P粉947296325
P粉947296325

全部回复(1)
P粉330232096
else return <></>

所以<></>被返回而没有key

你可以简单地返回一个空字符串来避免警告

else return ''
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号