这是我的代码我没有得到如何在页面上显示数据。当我尝试时,我在页面上什么都没有,它显示:
警告:数组或迭代器中的每个子节点都应该有一个唯一的"键" 丙
这是我的代码。
import React, { Component } from 'react';
import './App.css';
class App extends Component {
constructor(){
super();
this.state = {
data: []
}
}
componentDidMount()
{
fetch("https://blockchain.info/ticker").
then((Response) => Response.json()).
then ((findresponse)=>
{
console.log(findresponse)
this.setState({
data: [findresponse]
});
})
}
render()
{
return(
<div>
{
this.state.data.map((dynamicData, Key) =>
<div>
<span>{dynamicData.key}</span>
</div>
)
}
</div>
)
}
}
export default App;
答案 0 :(得分:0)
这是一个反应警告。
根据docs:
“key”是您需要包含的特殊字符串属性 创建元素列表。
您在访问比特币返回的数据时遇到问题,因为您有一个对象数组。要访问从API返回的数据,您需要执行以下操作:
class Example extends React.Component {
constructor() {
super();
this.state = {
data: []
}
}
componentDidMount() {
fetch("https://blockchain.info/ticker").
then(response => response.json()).
then(findresponse => {
this.setState({
data: [findresponse]
});
})
}
render() {
return (
<div>
{
this.state.data.map((dynamicData, Key) => {
let keys = Object.keys(dynamicData);
let d = dynamicData;
return keys.map(data => {
return (
<div style={{borderBottom: '1px solid black'}}>
<p>Currency: {data}</p>
<p>Buy: {dynamicData[data].buy}</p>
</div>
);
});
})
}
</div>
)
}
}
ReactDOM.render(<Example />, document.getElementById("root"));
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>
&#13;
答案 1 :(得分:0)
您的代码是否有任何问题,或者只是关于warning
消息的问题?如果是这样的话,无论何时在React中映射数组,都必须为它们提供key
道具。这很有帮助,因此React知道将来哪些项目已更改,更新甚至添加。
// Key here stands for dynamicData's index in the array and not its key prop.
this.state.data.map((dynamicData, Key) =>
<div key={Key}>
<span>{dynamicData.key}</span>
</div>
)
我建议您将其从Key
重命名为index
,这样您就不会在代码中混淆密钥。
this.state.data.map((dynamicData, index) =>
<div key={index}>
<span>{dynamicData.key}</span>
</div>
)
有关React中keys
的详细信息,建议您阅读this链接。