【发布时间】:2021-02-20 15:10:30
【问题描述】:
Widgets.js
import React, {useContext} from 'react';
import { DataContext } from '../contexts/DataContext';
const Widgets = () => {
const {updates} = useContext(DataContext);
console.log(updates);
return (
<div className="MainWidget">
<ul>
{updates.map(update => {
return (
<div>
<li>{update.current.condition}</li>
<p>{update.current.temp_c}</p>
</div>
);
})}
</ul>
</div>
);
}
export default Widgets;
我正在从返回错误的 API 映射数据:TypeError: updates.map is not a function,但实际上它使用 console.log() 函数在控制台中返回数据。
DataContext.js :我正在使用 axios 从 weatherapi.com 获取数据并使用“setUpdates”功能设置状态“更新”。
import React, {useState, useEffect, createContext} from 'react';
import axios from 'axios';
export const DataContext = createContext();
const DataContextProvider = (props) => {
const [updates, setUpdates] = useState({});
const url = "https://api.weatherapi.com/v1/current.json?key=931701d0de0c4d05b0b34936203011&q=London";
useEffect(() => {
axios.get(url)
.then(res => {
console.log(res.json())
setUpdates(res.data)
})
.catch(err => {
console.log(err)
})
})
return (
<div>
<DataContext.Provider value={{updates}}>
{props.children}
</DataContext.Provider>
</div>
)
}
export default DataContextProvider;
【问题讨论】:
-
您在控制台中得到了什么?可以加个截图吗?
-
检查更新是数组还是 json 对象。
-
@NadiaChibrikova 刚刚加了一个
-
所以它是一个具有 2 个字段而不是数组的单个对象。你不能迭代它。如果您希望它是一个数组,那么您的上下文有问题
-
我使用 ([ ]) 来设置期望数组的状态,而不是 ??期待一个对象。
标签: javascript reactjs api