我有一个关于对象操作的错误
i have an error about object manipulation
大家早上好,
我在 json 的简单操作中遇到错误。
我给你看代码:
import React, {useState, useEffect} from 'react';
import Bscpricequery, {TOKEN_QUERY, bitquery} from './bscpricequery';
import Viewcoinbsc from '../../component/page/Viewcoinbsc';
function Apipricebsc() {
const [pricecontract, setPricecontract]= useState([""])
useEffect(() => {
fetch(bitquery,{
method: "POST",
headers: {"content-type": "application/json",
"X-API-KEY": "XXX"},
body: JSON.stringify({query: TOKEN_QUERY })
}). then(response => response.json() )
.then (data => setPricecontract(data.data.ethereum.list1))
.catch(console.error);
}, [] );
//console.log(pricecontract)
// const listTokenBsc = pricecontract.filter((listtokenbsc) => console.log(listtokenbsc) );
// console.log ("filtrato", listTokenBsc)
return (
<div>
{ pricecontract.map((listtokenbsc)=>{
return console.log(listtokenbsc);
} )}
</div>
)
}
export default Apipricebsc;
在最后一行有 console.log ()
有了console.log(listtokenbsc),我从容收货,我只给你看1
baseCurrency: {address: '0xe9e7cea3dedca5984780bafc599bd69add087d56', symbol: 'BUSD', name: 'BUSD Token'}
block: {height: 17790981, timestamp: {…}}
quoteAmount: 7743.606417144352
quoteCurrency: {address: '0x55d398326f99059ff775485246999027b3197955', symbol: 'USDT', name: 'Tether USD'}
quotePrice: 1.006419563656451
tradeAmount: 7700.600459087681
tradeIndex: "9"
trades: 1
[[Prototype]]: Object
使用 console.log (listtokenbsc.baseCurrency),效果也很好,我得到了数据
{address: '0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82', symbol: 'Cake', name: 'PancakeSwap Token'}
address: "0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82"
name: "PancakeSwap Token"
symbol: "Cake"
[[Prototype]]: Object
而不是 console.log (listtokenbsc.baseCurrency.name) 或 console.log (listtokenbsc.baseCurrency.address) 我得到了错误
“未捕获的类型错误:无法读取未定义的属性(读取 'name')”
我不明白为什么我有这个问题。你能帮助我吗?
THK
你可以试试这个:console.log(listtokenbsc.baseCurrency[address])
如果这不起作用,您可以这样做:
Var x = listtokenbsc.baseCurrency;
console.log(x.address)
发生这种情况是因为在第一次渲染时您没有处于状态的对象,错误只是停止了代码执行。
请记住 useEffect 发生在第一次渲染之后。 listtokenbsc 最初是一个字符串(查看默认状态值)。
很可能,console.log(listtokenbsc.baseCurrency) 的结果就是成功获取后 listtokenbsc 中的结果(这样就不会发生错误)。
因此,您有几种解决方法:
// 1
if (typeof listtokenbsc === 'object' && 'name' in listtokenbsc) {
console.log(listtokenbsc.name)
}
// 2
console.log(listtokenbsc?.baseCurrency?.name)
// 3
const [pricecontract, setPricecontract]= useState([{}])
大家早上好, 我在 json 的简单操作中遇到错误。 我给你看代码:
import React, {useState, useEffect} from 'react';
import Bscpricequery, {TOKEN_QUERY, bitquery} from './bscpricequery';
import Viewcoinbsc from '../../component/page/Viewcoinbsc';
function Apipricebsc() {
const [pricecontract, setPricecontract]= useState([""])
useEffect(() => {
fetch(bitquery,{
method: "POST",
headers: {"content-type": "application/json",
"X-API-KEY": "XXX"},
body: JSON.stringify({query: TOKEN_QUERY })
}). then(response => response.json() )
.then (data => setPricecontract(data.data.ethereum.list1))
.catch(console.error);
}, [] );
//console.log(pricecontract)
// const listTokenBsc = pricecontract.filter((listtokenbsc) => console.log(listtokenbsc) );
// console.log ("filtrato", listTokenBsc)
return (
<div>
{ pricecontract.map((listtokenbsc)=>{
return console.log(listtokenbsc);
} )}
</div>
)
}
export default Apipricebsc;
在最后一行有 console.log () 有了console.log(listtokenbsc),我从容收货,我只给你看1
baseCurrency: {address: '0xe9e7cea3dedca5984780bafc599bd69add087d56', symbol: 'BUSD', name: 'BUSD Token'}
block: {height: 17790981, timestamp: {…}}
quoteAmount: 7743.606417144352
quoteCurrency: {address: '0x55d398326f99059ff775485246999027b3197955', symbol: 'USDT', name: 'Tether USD'}
quotePrice: 1.006419563656451
tradeAmount: 7700.600459087681
tradeIndex: "9"
trades: 1
[[Prototype]]: Object
使用 console.log (listtokenbsc.baseCurrency),效果也很好,我得到了数据
{address: '0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82', symbol: 'Cake', name: 'PancakeSwap Token'}
address: "0x0e09fabb73bd3ade0a17ecc321fd13a19e81ce82"
name: "PancakeSwap Token"
symbol: "Cake"
[[Prototype]]: Object
而不是 console.log (listtokenbsc.baseCurrency.name) 或 console.log (listtokenbsc.baseCurrency.address) 我得到了错误 “未捕获的类型错误:无法读取未定义的属性(读取 'name')”
我不明白为什么我有这个问题。你能帮助我吗? THK
你可以试试这个:console.log(listtokenbsc.baseCurrency[address])
如果这不起作用,您可以这样做:
Var x = listtokenbsc.baseCurrency;
console.log(x.address)
发生这种情况是因为在第一次渲染时您没有处于状态的对象,错误只是停止了代码执行。 请记住 useEffect 发生在第一次渲染之后。 listtokenbsc 最初是一个字符串(查看默认状态值)。
很可能,console.log(listtokenbsc.baseCurrency) 的结果就是成功获取后 listtokenbsc 中的结果(这样就不会发生错误)。
因此,您有几种解决方法:
// 1
if (typeof listtokenbsc === 'object' && 'name' in listtokenbsc) {
console.log(listtokenbsc.name)
}
// 2
console.log(listtokenbsc?.baseCurrency?.name)
// 3
const [pricecontract, setPricecontract]= useState([{}])