Reactjs 从api呈现数据 const[error,setError]=useState(null); const[isLoaded,setIsLoaded]=useState(false); const[items,setItems]=useState([]); useffect(()=>{ 获取(“api url”) .then(res=>res.json()) .那么( (结果)=>{ setIsLoaded(真); 设置项(结果项); }, (错误)=>{ setIsLoaded(真); 设置错误(错误); } ) }, []) 如果(错误){ 返回错误:{Error} }否则,如果(!已加载){ 返回装载。。。; }否则{ 返回( {items.map(item=>( console.log(项目) ))} ); }
如何在typescript中呈现对象数组中的数据?Reactjs 从api呈现数据 const[error,setError]=useState(null); const[isLoaded,setIsLoaded]=useState(false); const[items,setItems]=useState([]); useffect(()=>{ 获取(“api url”) .then(res=>res.json()) .那么( (结果)=>{ setIsLoaded(真); 设置项(结果项); }, (错误)=>{ setIsLoaded(真); 设置错误(错误); } ) }, []) 如果(错误){ 返回错误:{Error} }否则,如果(!已加载){ 返回装载。。。; }否则{ 返回( {items.map(item=>( console.log(项目) ))} ); },reactjs,typescript,api,Reactjs,Typescript,Api,如何在typescript中呈现对象数组中的数据? 调用console.log(item)时可以看到数据,console显示一个包含所有数据的对象数组 我试过了 const [error, setError] = useState(null); const [isLoaded, setIsLoaded] = useState(false); const [items, setItems] = useState([]); useEffect(() => { fetch
调用console.log(item)时可以看到数据,console显示一个包含所有数据的对象数组
我试过了
const [error, setError] = useState(null);
const [isLoaded, setIsLoaded] = useState(false);
const [items, setItems] = useState([]);
useEffect(() => {
fetch("api-url")
.then(res => res.json())
.then(
(result) => {
setIsLoaded(true);
setItems(result.items);
},
(error) => {
setIsLoaded(true);
setError(error);
}
)
}, [])
if (error) {
return <div>Error: {error}</div>
} else if (!isLoaded) {
return <div>Loading...</div>;
} else {
return (
<ul>
{items.map(item => (
console.log(item)
))}
</ul>
);
}
{items.map(item=>(
-
{item.label}
))}
数据库由对象数组组成{label:“string”,value:“string”,boolean:true}当我尝试item.label或item.value时,我得到“属性'label'在类型'never'上不存在”。
尝试将您的“item”指定为“any”类型,以防止TS将其视为“never”
{items.map((item:item)=>(
-
{item.label}
))}
编辑:添加了自定义界面的示例,而不是使用“any”
接口项{
值:字符串;
标签:字符串;
someBOolean:boolean;
}
尝试为您的“项目”指定“任意”类型,以防止TS将其视为“从不”
{items.map((item:item)=>(
-
{item.label}
))}
编辑:添加了自定义界面的示例,而不是使用“any”
接口项{
值:字符串;
标签:字符串;
someBOolean:boolean;
}
您可以在useState
中定义期望值的类型,如下所示:
const[items,setItems]=useState([])代码>
其中,对象
可以是项目的实际接口。您可以在useState
中定义期望值的类型,如下所示:
const[items,setItems]=useState([])代码>
其中,Object
可能是您的项的实际接口。Hi Tuan,您能将console.log(items)
粘贴到这里吗?[{..}{..}{..}{..}{..}]0:{label:“some string”,value:“some string”,boolean:true}。9:{label:“some string”,value:“some string”,boolean:true}我解决了它,我只需要添加useState([])Hi Tuan,你能把console.log(items)
粘贴到这里吗?[{……}{……}{……}]0:{label:“some string”,value:“some string”,boolean:true}。9:{label:“some string”,value:“some string”,boolean:true}我解决了它,我只需要添加useState([])这样的变通方法,这意味着您只是在与Typescript作斗争,而不是按照预期的方式使用它。如果您知道项目
应该具有值
和标签
属性,那么请创建一个项目
类型,而不是使用任何
。我已经添加了它,它可以正常工作。如何指定项目的类型?对象具有标签、值和布尔类型。谢谢@Oli,这是一个公平的观点。我已经更新了答案,为该项目提供了一个自定义界面。有关类型/接口以及它们之间的区别的更多信息,请看这里:这样的变通方法意味着您只是在与Typescript作斗争,而不是按照预期的方式使用它。如果您知道项目
应该具有值
和标签
属性,那么请创建一个项目
类型,而不是使用任何
。我已经添加了它,它可以正常工作。如何指定项目的类型?对象具有标签、值和布尔类型。谢谢@Oli,这是一个公平的观点。我已经更新了答案,为该项目提供了一个自定义界面。有关类型/接口及其差异的更多信息,请查看:
<ul>
{items.map(item => (
<li key={item.value}>
{item.label}
</li>
))}
</ul>