Javascript 如何更新状态的脚本
嗨,朋友们,我在从api获取数据后更新状态时遇到问题。有人能帮我弄清楚吗。顺便说一句,我是打字新手Javascript 如何更新状态的脚本,javascript,reactjs,typescript,react-hooks,Javascript,Reactjs,Typescript,React Hooks,嗨,朋友们,我在从api获取数据后更新状态时遇到问题。有人能帮我弄清楚吗。顺便说一句,我是打字新手 type FrequentlySearches = { value: string; count: string; }; const initialFrequentlySearch: FrequentlySearches[] = [{ value: '', count: '', }]; export const GetFrequentlySearches = (
type FrequentlySearches = {
value: string;
count: string;
};
const initialFrequentlySearch: FrequentlySearches[] = [{
value: '',
count: '',
}];
export const GetFrequentlySearches = () => {
const [data, dataSet] = useState(initialFrequentlySearch);
const fetchFrequentlySearches = useCallback(async () => {
let response = await fetch(url_pathname)
let datas = await response.json()
for (const key in datas) {
// how to update the state here !!!
dataSet({
value: datas[key].value,
count: datas[key].count
})
}
}, [url_pathname])
useEffect(() => {
fetchFrequentlySearches()
}, [url_pathname])
};
你需要
(1) 正确键入fetch
,请参阅
(2) 数据
是一个对象数组,因此
dataSet({
value: datas[key].value,
count: datas[key].count
})
没有多大意义-将对象数组传递给状态设置器函数
将响应的对象值作为一个数组可能会更容易——无需手动迭代
useCallback
也是完全多余的
export const GetFrequentlySearches = () => {
const [data, setData] = useState(initialFrequentlySearch);
useEffect(() => {
fetch(url_pathname)
.then((response => response.json()))
.then((datasUntyped) => {
const datas = datasUntyped as FrequentlySearches[];
setData(Object.values(datas));
})
// .catch(handleErrors);
}, [url_pathname])
}
如果API结果是一个对象数组,而不是一个对象对象,那么您根本不需要object.values
,只需这样做即可
setData(datas);
如果API结果包含需要排除的其他对象属性,请首先映射数组以删除它们:
setData(
Object.values(datas)
.map(obj => ({ value: obj.value, count: obj.count }))
);
它显示类型为“{value:any;count:any;}”的>>>参数不能分配给类型为“SetStateAction”的参数。Object literal只能指定已知的属性,而“value”在类型“SetStateAction”中不存在。ts(2345)看起来您的数据以您需要的形状返回,但您正在尝试对其进行迭代,每次都将其设置为单个对象,而不是数组。为什么不直接做
数据集(datas)
?谢谢你的回复,我要注意你的观点。:)