我写了一个BlackJack游戏,但是在我从卡片API中查询API后,卡片从未显示在屏幕上。我有控制台记录了玩家甲板和交易甲板,它有卡片数据,但没有显示。
错误如下:index.js:1375警告:列表中的每个子级都应该有一个唯一的“键”道具。
检查BlackJack
的渲染方法。参见https://reactjs.org/link/warning-keys了解更多信息。在黑杰克(http://localhost:3000/static/js/main.chunk.js: 4166:3)的div上,在威斯泰尔斯(黑杰克)(http://localhost:3000/static/js/0.chunk.js: 54861:31)
这是查询后的数据
[Array(2)]
0: Array(2)
0: {code: "6C", image: "https://deckofcardsapi.com/static/img/6C.png", images: {…}, value: "6", suit: "CLUBS"}
1: {code: "JD", image: "https://deckofcardsapi.com/static/img/JD.png", images: {…}, value: "JACK", suit: "DIAMONDS"}
length: 2
__proto__: Array(0)
length: 1
__proto__: Array(0)
[Array(1)]
0: Array(1)
0: {code: "4H", image: "https://deckofcardsapi.com/static/img/4H.png", images: {…}, value: "4", suit: "HEARTS"}
length: 1
__proto__: Array(0)
length: 1
__proto__: Array(0)
下面是我的代码:
import React, { useState, useEffect, useCallback } from 'react';
import axios from 'axios';
import { withStyles } from '@material-ui/core/styles';
const styles = () => ({
app: {
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
flexDirection: 'column'
},
deckContainer: {
textAlign: 'center'
}
})
const BlackJack = ({ classes }) => {
const [deckId, setDeckId] = useState(null);
const [playerDeck, setPlayerDeck] = useState([]);
const [dealerDeck, setDealerDeck] = useState([]);
const [gameOver, setGameOver] = useState(false);
const [winner, setWinner] = useState(null);
useEffect(async () => {
const deck_id = await axios.get('https://deckofcardsapi.com/api/deck/new/shuffle/?deck_count=1')
.then(res => res.data.deck_id);
setDeckId(deck_id);
}, []);
const handleStartGame = async () => {
const playerDeckList = [];
const dealerDeckList = [];
const playerDrawnCards = await axios.get(`https://deckofcardsapi.com/api/deck/${deckId}/draw/?count=2`).then(res => res.data.cards);
playerDeckList.push(playerDrawnCards);
setPlayerDeck(playerDeckList);
const dealerDrawnCards = await axios.get(`https://deckofcardsapi.com/api/deck/${deckId}/draw/?count=1`).then(res => res.data.cards);
dealerDeckList.push(dealerDrawnCards);
setDealerDeck(dealerDeckList);
};
console.log(deckId);
console.log(playerDeck);
console.log(dealerDeck);
// console.log(playerDeck[0]);
return (
<div className={classes.app}>
<h1>Welcome to the Black Jack Game</h1>
<br />
<div>
<button onClick={handleStartGame}>start game</button>
{/* <button onClick={handlePlayerHit}>hit</button> */}
{/* <button onClick={handlePlayerStand}>stand</button> */}
{/* <button onClick={handlePlayerReset}>reset game</button> */}
</div>
<div>
{/* <GameOver isGameOver={gameOver} /> */}
</div>
<br />
<div>
<h2>Dealer: </h2>
<div className={classes.deckContainer}>
{dealerDeck.map(card => {
return (
<div key={card.code}>
<img
src={card.image}
alt={card.value}
/>
</div>
)
})}
</div>
<br />
<h2>Player: </h2>
<div className={classes.deckContainer}>
{playerDeck.html" target="_blank">map(card => {
return (
<div key={card.code}>
<img
src={card.image}
alt={card.value}
/>
</div>
)
})}
</div>
</div>
</div>
)
};
导出默认样式(样式)(BlackJack);
这可能是因为获取api是异步操作。React首先呈现jsx,然后遍历逻辑,此时DealDeck映射为空。当fetch设置为false时,尝试为fetching api再设置1个状态(默认为false),然后仅当isFetching==false时,在JSX呈现相关组件中。
[isFetching, setIsFetching] = useState(true);
.
.
.
const handleStartGame = async ()=>{
.
.
.
setIsFetching(false);
}
.
.
.
return(
{!isFetching && dealerDeck.map... }
)```
您正在设置的数据是一个数组的数组,因为res.data。卡片
已经是一个数组。
因此,将您的handleStartGame
更改为
const handleStartGame = async () => {
const playerDrawnCards = await axios
.get(`https://deckofcardsapi.com/api/deck/${deckId}/draw/?count=2`)
.then((res) => res.data.cards);
setPlayerDeck(playerDrawnCards);
const dealerDrawnCards = await axios
.get(`https://deckofcardsapi.com/api/deck/${deckId}/draw/?count=1`)
.then((res) => res.data.cards);
setDealerDeck(dealerDrawnCards);
};
我对如何创建一个简单的todo应用程序的反应和探索方式还不熟悉。我当前收到错误“警告:列表中的每个孩子都应该有一个唯一的“键”道具。”一切似乎都很好,但我一定是做错了什么。 如果有人能帮上忙,那就br太好了/解释为什么会发生这个错误,那就太好了。
问题内容: 我正在使用Google Books API构建应用,并且似乎正在向列表中的每个孩子传递唯一键,但是错误不会消失。我一定在做错事,但不确定。 请注意,在返回const books之后,我有一个console.log(book.id),它将在控制台中显示所有10个唯一的id键。但是,当我尝试使用key = {book.id}将其传递给该组件的子组件时,会出现此错误。 问题答案: 在需要去最
在这个简单的React应用程序中,我不明白为什么我会收到以下警告信息: 警告:列表中的每个孩子都应该有一个唯一的“键”道具。 对我来说,似乎我把密钥放在了正确的位置,形式为key={item.login.uuid} 我怎样才能摆脱警告信息?把钥匙放在哪里合适? 应用程序。js 列表js
所以我想渲染数组,但它一直在说,警告:列表中的每个孩子都应该有一个唯一的“键”道具,即使它有唯一的键,我的数组包含三个元素,它甚至没有正确渲染第三个数组,按钮没有甚至因为某种原因第三李的工作。 更新:我从firebase获得的数据如下所示: 此代码将选择每个数据的标题 当我将鼠标悬停在“fikka-fikka”上时,“fikka-fikka”的按钮甚至不起作用。在ed sheeran和一个方向上,
我调用一个APIendpoint,将其数据保存到一个状态,然后呈现它。它显示在浏览器中,但控制台上有一个警告:。 我的: 我不明白在render()中该将关键道具放在哪里。这是我的代码片段: 不使用钥匙道具会带来什么改进?我被这些
我正在使用GoogleBooksAPI构建一个应用程序,我似乎正在向列表中的每个孩子传递一个唯一的密钥,但错误不会消失。我一定是做错了什么,但我不知道是什么。 注意,在const books中返回后,我有一个控制台。日志(book.id),它将在控制台中显示所有10个唯一的id键。但是当我试图使用key={book.id}将它传递给这个组件的子组件时,我得到了这个错误。