Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用嵌套的Json响应setState_Javascript_Arrays_Json_Reactjs - Fatal编程技术网

Javascript 使用嵌套的Json响应setState

Javascript 使用嵌套的Json响应setState,javascript,arrays,json,reactjs,Javascript,Arrays,Json,Reactjs,我刚开始教自己一些反应。在我的第一个项目中,我试图用Corona数据集的数据创建一些基本图表。数据集由我自己的restapi创建,如下所示: [{ "Bundesland": "Bayern", "Landkreis": "LK Erlangen-H\u00f6chstadt", "Altersgruppe": "A80+", "Ges

我刚开始教自己一些反应。在我的第一个项目中,我试图用Corona数据集的数据创建一些基本图表。数据集由我自己的restapi创建,如下所示:

[{
    "Bundesland": "Bayern",
    "Landkreis": "LK Erlangen-H\u00f6chstadt",
    "Altersgruppe": "A80+",
    "Geschlecht": "W",
    "AnzahlFall": 1,
    "AnzahlTodesfall": 0,
    "Meldedatum": 1577836800000,
    "IdLandkreis": "09572",
    "Datenstand": "05.01.2021, 00:00 Uhr",
    "NeuerFall": 0,
    "NeuerTodesfall": -9,
    "NeuGenesen": 0,
    "AnzahlGenesen": 1
  },
  {
    "Bundesland": "Nordrhein-Westfalen",
    "Landkreis": "SK K\u00f6ln",
    "Altersgruppe": "A35-A59",
    "Geschlecht": "W",
    "AnzahlFall": 1,
    "AnzahlTodesfall": 0,
    "Meldedatum": 1577923200000,
    "IdLandkreis": "05315",
    "Datenstand": "05.01.2021, 00:00 Uhr",
    "NeuerFall": 0,
    "NeuerTodesfall": -9,
    "NeuGenesen": 0,
    "AnzahlGenesen": 1
  }]
const [corona, setCorona] = useState([])

useEffect(() => {
    d3.json(path).then(res => { 
        let data = res
        setCorona(data)
    }).catch(err =>{console.log(err)})
},[])
在使用useEffect钩子获取数据之后,我尝试使用useState钩子声明一个新的数据变量,我可以传递不同的组件

我当前的代码方法如下所示:

[{
    "Bundesland": "Bayern",
    "Landkreis": "LK Erlangen-H\u00f6chstadt",
    "Altersgruppe": "A80+",
    "Geschlecht": "W",
    "AnzahlFall": 1,
    "AnzahlTodesfall": 0,
    "Meldedatum": 1577836800000,
    "IdLandkreis": "09572",
    "Datenstand": "05.01.2021, 00:00 Uhr",
    "NeuerFall": 0,
    "NeuerTodesfall": -9,
    "NeuGenesen": 0,
    "AnzahlGenesen": 1
  },
  {
    "Bundesland": "Nordrhein-Westfalen",
    "Landkreis": "SK K\u00f6ln",
    "Altersgruppe": "A35-A59",
    "Geschlecht": "W",
    "AnzahlFall": 1,
    "AnzahlTodesfall": 0,
    "Meldedatum": 1577923200000,
    "IdLandkreis": "05315",
    "Datenstand": "05.01.2021, 00:00 Uhr",
    "NeuerFall": 0,
    "NeuerTodesfall": -9,
    "NeuGenesen": 0,
    "AnzahlGenesen": 1
  }]
const [corona, setCorona] = useState([])

useEffect(() => {
    d3.json(path).then(res => { 
        let data = res
        setCorona(data)
    }).catch(err =>{console.log(err)})
},[])
我假设api调用正在工作,因为我可以记录结果。但是,我无法使用当前的setCorona方法声明corona

编辑:这是来自api调用的响应
我真的不明白你想做什么- 像这样的

const [corona, setCorona] = useState([])

useEffect(() => {
    d3.json(path).then(res => { 
        setCorona(res.data)
    }).catch(err =>{console.log(err)})
},[])

return (
  <div> {corona.map()..... and so on} </div>
OR
   <div> {corona[0].Bundesland} </div>

)
const[corona,setCorona]=useState([])
useffect(()=>{
json(path).then(res=>{
setCorona(分辨率数据)
}).catch(err=>{console.log(err)})
},[])
返回(
{corona.map()……等等}
或
{corona[0].邦德斯兰}
)

React的设置状态是异步的。不要立即反映更改(如setState之后的控制台日志)。我想这就是问题所在


import React,{useffect,useState}来自“React”;
常数数据=[{
“邦德斯兰”:“拜仁”,
“Landkreis”:“LK Erlangen-H\u00f6chstadt”,
“Altersgruppe”:“A80+”,
“Geschlecht”:“W”,
“AnzahlFall”:1,
“AnzahlTodesfall”:0,
“Meldedatum”:157783680000,
“IdLandkreis”:“09572”,
“Datenstand”:“2021年1月5日00:00 Uhr”,
“NeuerFall”:0,
“NeuerTodesfall”:-9,
“NeuGenesen”:0,
“AnzahlGenesen”:1
},
{
“邦德斯兰”:“北莱茵威斯特法伦”,
“Landkreis”:“SK K\u00f6ln”,
“Altersgruppe”:“A35-A59”,
“Geschlecht”:“W”,
“AnzahlFall”:1,
“AnzahlTodesfall”:0,
“Meldedatum”:15779232000,
“IdLandkreis”:“05315”,
“Datenstand”:“2021年1月5日00:00 Uhr”,
“NeuerFall”:0,
“NeuerTodesfall”:-9,
“NeuGenesen”:0,
“AnzahlGenesen”:1
}]
功能乐趣(道具){
const[corona,setCorona]=useState([])
常量handleClick=()=>{
setCorona(数据)
}
//此函数记录电晕的值。
useffect(()=>{
console.log('记录corona以证明其已更新',corona);
},[corona]);
返回(
单击以更新corona。
);
}
导出默认值;

如果您已验证电晕设置为正确的值,那么我不确定您的实际问题是什么?我看不出这段代码中有任何明显的错误。可能是我试图将整个json用作corona的值的问题吗?虽然在呈现过大的数据集时可能会遇到性能问题,但使用它实际上并没有什么问题。但是你的问题没有真正意义。当你调用setCorona时,你没有声明corona。你可以把它看作是对corona的赋值。我试图将json作为数组设置为corona变量,这样我就可以在html中实现数组中的值,或者将它们传递给其他组件。问题是corona是一个空数组,即使在“then”之后调用setCorona()@rin_o first console log“res”也是如此。看看你从服务器上得到了什么。然后选择正确的对象并将其设置为您的状态。然后在返回之前添加另一个控制台日志,以查看此变量中将重新呈现的值。它应该有用。@ZiedHf谢谢你的投入,帮了我很多忙!但是,如果使用上面的示例,我会得到TypeError:无法读取未定义的属性“Bundesland”。数组仍然为空。但是,如果我关注json中的一个特定值,我可以在html@rin_o如果corona的默认值为null、未定义或空数组,那么请确保您的应用程序将崩溃。请改为这样写:corona[&&corona[0]&&corona[0]。Bundesland感谢您的回答,它帮助我理解react背后的逻辑!我可以创建一个函数,例如每隔30秒调用setState一次,而不是像您在示例代码中那样使用handleClick吗?@rin_o检查一下。