警告:列表中的每个子项都应该有一个唯一的“key”道具,即使它有唯一的 key React

2024-01-10

所以我想渲染数组,但它一直说,警告:列表中的每个子项都应该有一个唯一的“key”道具,即使它有唯一的键,我的数组包含三个元素,它甚至不能正确渲染第三个数组,由于某种原因,该按钮甚至无法在第三里工作。

import React, { useEffect, useRef } from "react";
import fire from "./firebase";
import firebase from "firebase"
import { useState } from "react"
import Header from "./header"
import Nav from "./nav"
import { NavLink, Redirect } from "react-router-dom";
import AudioPlayer from "./audioplayer"   

const Music = ({ match }) => {
    const audioRef = useRef();
    const audioPlayer = audioRef.current
    const [audioSrc, setAudioSrc] = useState()
    const [musics, setMusics] = useState([])
    const [user, setUser] = useState(null)
    const [pfp, setPfp] = useState(null)
    const [audioTitle, setAudioTitle] = useState(null)
    const { params: { uID } } = match;
    var userName;
    var tracksTitle = [];
    useEffect(()=>{
        firebase.database().ref("users/"+uID+"/praivate/login credentials").on("value", (snapshot)=>{
            setUser(snapshot.val().userName)
            setUser(snapshot.val().userName)
        })
        firebase.database().ref("users/"+uID+"/public/profile/pic").on("value", (snapshot)=>{
            console.log(snapshot.val().pfpUrl)
            setPfp(snapshot.val().pfpUrl)
        })
    }, [])
    var music;

    //maybe the problem is over here somewhere
    useEffect(()=>{
        firebase.database().ref("users/"+uID+"/public/songs/").on("value", (snapshot)=>{
            //stores data in music.
            music = snapshot.val()
            //gets all title of the data
            Object.values(music).forEach((value)=>{  
                tracksTitle.push(value.title)//pushes titles to tracksTitle
            })
            setMusics(tracksTitle) //stores all track title in musics
        })
       
    }, [uID])

    const [progVal, setProgVal] = useState("0%")
    function update(event){
        let duration = (event.target.currentTime/event.target.duration)*100
        setProgVal(duration)
    }
    
    function play(event){
        const value = event.target.getAttribute("value")
        console.log(value)
        if(value){
            firebase.database().ref("public/songs/"+value).on("value", (snapshot)=>{
                setAudioSrc(snapshot.val().aduioURL)
            })
        }
        setAudioTitle(value)
        audioPlayer.play()
        
    }

    function playAudio(){
        audioPlayer.play()
    }

    

    function stop(event){
        audioPlayer.pause()
    }

   
    
    return(
        <>
            <Nav />
            <div id = "profile" className = "main">
                <audio id = "player" ref = {audioRef} src = {audioSrc} name = "audioplayer" onTimeUpdate = {update}>
                </audio>
                <div class = "profile-container">
                    <div className = "cover-pic">
                        <img src = "" />
                        <div className = "pfp">
                            <img src = {pfp} height = "100" width = "100"/>
                        </div>
                        <div className = "User-Name">
                            <h1>{user}</h1>
                        </div>
                    </div>
                    <div class = "tabsContainer">
                    <div class = "tabs-holder">
                    <NavLink to = {"/u/"+uID+"/music"}><button><span>Music</span></button></NavLink>
                        <button><span>Playlist</span></button>
                        <button><span>About</span></button>
                    </div>
                </div>
                </div>
               
                <div class = "music-content-container">
                    <div class = "music-box">
                        <div class = "user-musics">
                            <ul>
                                {musics && musics.map((name, i)=>{
                                    console.log()
                                    return(
                                        <>
                                            //it does not render the third array properly
                                            <li key = {i}><button onClick = {play} value = {name}>Play</button>{name}</li>
                                        </>
                                    )
                                })}
                            </ul>
                        </div>
                    </div>
                </div>
                
            </div>
            <AudioPlayer progVal = {progVal} stop = {stop} playAudio = {playAudio}/>
            <Header />
        </>
    )
    }  
export default Music
//
Can you guys please help me to figure out the problem, thank you in advance.

更新:我的 firebase 数据如下所示:

此代码将选择每个数据的标题

useEffect(()=>{
        firebase.database().ref("users/"+uID+"/public/songs/").on("value", (snapshot)=>{
            //stores data in music.
            music = snapshot.val()
            console.log(music)
            //gets all title of the data
            Object.values(music).forEach((value)=>{ 
                 
                tracksTitle.push(value.title)//pushes titles to tracksTitle
            })
            setMusics(tracksTitle) //stores all track in musics
        })

当我将鼠标悬停在“fikka fikka”上时,“fikka fikka”按钮甚至不起作用,它甚至不会将光标更改为文本光标,而在 ed sheeran 和一个方向上它没有这个问题


React 键需要位于映射中返回的最外层元素上。

{musics && musics.map((name, i)=>{
  return(
  <Fragment key={i}>
    //it does not render the third array properly
    <li>
      <button onClick={play} value={name}>Play</button>
      {name}
    </li>
  </Fragment>)
})}

请注意,为了做到这一点,反应片段速记是不兼容的,你must使用Fragment成分。或者因为只有一个元素Fragment基本上没用,将其拆下并将钥匙放在li它在哪里。

{musics && musics.map((name, i)=>{
  return(
  <li key={i}>
    <button onClick={play} value={name}>Play</button>
    {name}
  </li>)
})}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

警告:列表中的每个子项都应该有一个唯一的“key”道具,即使它有唯一的 key React 的相关文章

  • 为什么这个对象的“forEach 不是函数”?

    这可能真的很愚蠢 但我不明白为什么这不起作用 var a cat large a forEach function value key map console log value 未捕获的类型错误 a forEach 不是函数 http j
  • 输入类型货币格式,带逗号和小数位 2

    我只是想问如何制作输入类型文本的货币格式的JavaScript 当您输入数字时 数字是否可能带有逗号 另外 如何使数字固定为 2 个小数 如果我输入 3 位小数 最后一个数字将四舍五入 因此可以是 2 位小数 我有一个仅接受数字的文本框 我
  • 找不到模块:您尝试导入位于项目 src/ 目录之外的模块。不支持 src/ 之外的相对导入

    我刚刚开始React JS 但是我遇到了一个问题 尽管我进行了研究 但我无法得到结果 我尝试了很多方法 但我一直无法解决这个问题 你能帮忙吗 这是我在终端收到的错误 src App css node modules react script
  • 安装时反应 spring 错误

    你好 我有这个问题 如果我想将react spring安装到我的react项目中 它只会弹出一堆依赖项错误和警告 我不知道该怎么办 我试图检查react spring的文档 但找不到任何东西 我在 stackoverflow 上检查了几页
  • 带标签的 Material-ui 文本字段[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 谁能告诉我如何在material ui lib中制作带有标签的文本字段 寻找这样的东西 https github com callem
  • 逻辑 && 和 || JavaScript 中的运算符

    我想进一步澄清一些事情 考虑一下 var a 42 var b abc var c null a b 42 a b abc c b abc c b null 我知道对于 运算符 如果第一个操作数的测试为真 则 表达式的结果是第一个操作数 a
  • NodeJS Express 中每个请求的全局范围

    我有一个基本的快速服务器 需要在每个请求处理期间存储一些全局变量 更深入地说 请求处理涉及许多需要存储在变量中的操作 例如global transaction 当然 如果我使用global范围 每个连接都将共享其事务的信息 并且我需要一个全
  • Firestore onSnapshot() 方法多次触发

    我有一个带有多个路由和 vuex 的 vue cli 4 应用程序 Firestore 数据库已成功连接 我的应用程序立即反映从 Firestore 控制台应用于数据库的修改 在离开包含与 Firestore 同步 的组件的路线然后返回后
  • 窗口对象没有创建它的页面附加的属性

    我用window open url target 开一个url在新选项卡 窗口中 在此之前 我在新打开的窗口对象上设置了一些属性 目的是将数据从该页面 新窗口的创建者 传递到新创建的窗口 在除 Internet Explorer 之外的所有
  • 使用 document.getElementById().style.height javascript 从 css 获取值

    请提供有关这个谜团的见解 我试图通过以下方式从 div 框中获取高度值 var high document getElementById hintdiv style height alert high 如果该属性包含在 div 标记中 我可
  • 跨浏览器兼容音频有哪些选项?

    我正在使用这个功能 function playSound file MyAudio new Audio file MyAudio play 不幸的是 我正在努力寻找一种适用于所有浏览器的文件类型 Mp3 适用于 Chrome Safari
  • 从右到左的语言和编程问题

    我正在创建一个网络文本编辑器 它使用我创建的新语言 如 BBcode 这种标记语言将采用阿拉伯语 但我面临这些问题 在所有 IDE 和编辑器中将英语和阿拉伯语文本混合在同一行中确实很困难 因为会发生奇怪的事情 单词和字符的顺序发生变化 使用
  • [对象窗口]是什么?

    谷歌翻译有一些书签可以让您一键翻译 例如 javascript var t window getSelection window getSelection document getSelection document getSelectio
  • Gecko/Firefox 对 HTML5 通知的支持

    我想知道是否有任何内置支持HTML5 通知到目前为止 Gecko 浏览器有哪些功能 也许有一些隐藏的开发人员 我知道 WebKitwindow webkitNotifications效果很好 那么 有 Firefox 实现吗 Update
  • 我可以使用 javascript 生成 JSON 文件吗?

    我想在域 example1 com 上创建一个页面 并获取 解析另一个域 example2 com json json 上的 JSON 文件 可以使用 javascript 生成 json 文件 在 example2 com 上 吗 我认为
  • JS 中的 .Jar 文件

    有谁知道如何在 JS 中访问 jar 文件 我已经用 Java 创建了类并作为 jar 文件导入 我想从 JS 文件访问该类 大家好 我感谢你们所有人 我尝试在 Firefox XUL 中使用 JS 列出文件夹中的文件 但我做不到 然后我决
  • 传单地图显示为灰色

    我正在启动 leaflet js快速开始 http leafletjs com examples quick start html但我的地图显示为灰色 我缺少什么吗 脚本 js var leafletMap L map leafletMap
  • JavaScript IDE/编译器

    现在 我希望你们中的一些人能够理解我的要求 我是编程新手 我在 Codecademy com 上了解了 JavaScript 我使用 labs codecademy com 来编写 JavaScript 但它有限制 对于编程新手来说 我可以
  • 加密 Chrome 扩展程序?

    无论如何 要加密 Chrome 扩展程序 以免暴露源代码 您可以使用混淆器隐藏您的代码 市场上有很多可用的 像Google Closure编译器这样的工具很少 而且市场上有很多在线javascript ofuscators 你可以使用任何一
  • Bootstrap $('#myModal').modal('show') 不起作用

    我不知道为什么 但所有模态功能都不适用于我 我检查了版本和负载 它们都很好 我不断收到此错误消息 Uncaught TypeError modal is not a function 对于隐藏我已经找到了替代方案 代替 myModal mo

随机推荐

  • 引用Java属性文件中的其他变量[重复]

    这个问题在这里已经有答案了 可能的重复 如何引用java util Properties中的另一个属性 https stackoverflow com questions 872272 how to reference another pr
  • 无法禁用日志消息

    我在摆脱 Spring 生成的调试消息时遇到了一些麻烦 类似于以下消息 有数千个这样的条目 19 58 08 380 main DEBUG o s b f s DefaultListableBeanFactory Creating shar
  • “为什么运行时异常是不可恢复的?”

    在Java文档中 我看到了定义 如果可以合理地预期客户端会从异常中恢复 则将其设为受检查的异常 如果客户端无法执行任何操作来从异常中恢复 请将其设为未经检查的异常 未经检查的异常 争议 https docs oracle com javas
  • 如何使用 ProcessBuilder 与 CLI 程序持续交互

    我经常使用通过 docker 容器访问的 CLI 程序 进入容器后 我就可以开始使用相关的 CLI 程序 我遇到的问题是我想继续与同一个命令行实例交互 基本上我正在尝试创建一个将在 CLI 程序 之上 运行的 GUI 程序 我只是不知道如何
  • 为 AWS 设置“Stackdriver Kubernetes 监控”

    Google Cloud Platform 在 Kubecon 2018 上宣布了 Stackdriver Kubernetes Monitoring 看起来棒极了 我是一名运行着几个 Kubernetes 集群的 AWS 用户 我立即羡慕
  • 使用HMS Toolkit添加HMS和GMS时找不到com.huawei.hms:hwid:5.3.0.301 &推送套件

    我正在尝试将 HMS 添加到我们的 GMS 第一个应用程序中 这是一个庞大的应用程序 因此我们决定尝试 HMS Toolkit 转换软件 该工具包添加了必要的依赖项和模块 并在需要时进行了适当的替换 但是当我尝试构建我们的应用程序时 我收到
  • 异常:类型错误:无法设置未定义的属性“消息”

    在升级旧的 Angular 2 项目的许多依赖项后 我在运行时收到以下错误 EXCEPTION TypeError Cannot set property message of undefined ErrorHandler handleEr
  • gSoap EWS“错误 500:内部服务器错误”

    我在使用 ews gSoap 时遇到一些问题 我有下一个代码 ExchangeServiceBindingProxy proxy new ExchangeServiceBindingProxy endpoint c str soap pSo
  • 如何使用 Spark 数据框评估 Spark Dstream 对象

    我正在编写一个 Spark 应用程序 我需要根据历史数据评估流数据 这些数据位于 SQL Server 数据库中 现在的想法是 spark 将从数据库中获取历史数据并将其保存在内存中 并根据它评估流数据 现在我得到的流数据为 import
  • 如何在R中动态插入带有模式的列?

    这是一个跟进问题 https stackoverflow com questions 73938635 rename a column based on the original columns name r 73938710 noredi
  • 有没有办法在浏览器中编译代码(C/C++)?

    这个问题可能听起来很疯狂 有没有基于浏览器的编译器 本地客户端 https developer chrome com native client是一个沙箱 用于在浏览器中高效运行已编译的 C 和 C 代码 你可以探索这个
  • ReactJS:来自 State 的动态复选框

    我有一个动态元素的集合 所以我事先不知道该集合的内容是什么 我想动态渲染这些复选框 并默认将它们全部选中 您应该能够取消选中这些框 这会在渲染中触发另一个地图功能 所以基本上这是我的过滤器 我在国家设置上苦苦挣扎 我正在考虑以下内容 我想通
  • “此应用程序正在从后台线程修改自动布局引擎”

    我遇到以下错误 此应用程序正在从后台线程修改自动布局引擎 这可能会导致引擎损坏和奇怪的崩溃 每当我尝试将图像视图加载到表视图中时 相关代码如下 override func tableView tableView UITableView ce
  • 在 Gnuplot 中自定义颜色范围

    我有一个运行良好的等值线图 它为不同的值生成等量的颜色 我想要的是在右侧生成标签 以便为每个块提供正确的颜色 当前结果 我想要的是每个块都有这个值 300 100 70 30 10 1 0 编辑 当我添加这段代码时 set cbtics 3
  • 在 C++ 中使用 new 分配大于 2GB 的单个对象(在 Windows 上)

    我使用的是 Windows x64 模式 在 Visual Studio 上使用 MSVC 编译 这new当我这样做时 运算符似乎没有按预期工作 char buf new char 1LLU lt lt 32 但是如果我传入一个变量而不是直
  • 如何在两个PHP文件之间传递变量?

    我在名为 one php 的文件中有以下代码 a href two php Click here for 1 a a href two php Click here for 2 a 现在 当我单击锚标记链接之一时 它会将我带到two php
  • 如何在颤振中在屏幕中央创建标签栏?

    我正在尝试使用 flutter 在屏幕中心创建一个选项卡栏 同时尝试在列中给出 TabBarView 但我陷入了这个错误 请解决这个问题 I flutter 3983 EXCEPTION CAUGHT BY RENDERING LIBRAR
  • 是否可以像 Matlab 一样在 IPython 中显示对象实例变量?

    我正在尝试从 Matlab 转向 Python 而魔法 IPython 很好 Matlab 的一个非常好的功能是您可以在命令行上 通过省略 看到相关对象的实例变量 在 Matlab 中称为属性 这在 python 中可能吗 我猜是通过 IP
  • firebase实时数据库分片规则

    2019 11 03 更新 添加了错误的实时最小再现 https shardautherror firebaseapp com 在 Chrome 中加载链接后 按 ctrl shift i 并选择控制台以查看输出 我已尽力确保这完全符合我原
  • 警告:列表中的每个子项都应该有一个唯一的“key”道具,即使它有唯一的 key React

    所以我想渲染数组 但它一直说 警告 列表中的每个子项都应该有一个唯一的 key 道具 即使它有唯一的键 我的数组包含三个元素 它甚至不能正确渲染第三个数组 由于某种原因 该按钮甚至无法在第三里工作 import React useEffec