React-Axios => 无法读取未定义的属性(读取 'length')

React-Axios => Cannot read properties of undefined (reading 'length')

我正在尝试从 API 中检索一些数据。当我控制数据时它工作正常:

import axios from 'axios';

export default function Model() {
  
    const url = "api.blabla.com/blabla"
    const [model, setModel] = useState()
    useEffect(() => {
      const axiosPosts = async () => {
        const response = await axios(url)
        setModel(response.data)
      };
      axiosPosts();
    }, []);

   console.log(model.slug) //prints the slug!!

    
    return (
      <div>
       {model.slug} : {model.name} // TypeError slug undefined
      </div>
    )  

这段代码可能有什么问题?

api 响应需要时间,因此在开始时 model 被分配给您传递给 useState() 挂钩的参数值。

您未传递任何内容,因此在第一次反应渲染期间 model 未定义。

一种解决方案是将您的模板更改为:

{model?.slug} : {model?.name}

或者让它成为有条件的

{model && (
  <>
    {model.slug} : {model.name}
  </>
)}

在上面@ploppy 的回答中添加更多内容,这里的常见模式是

import axios from 'axios';

export default function Model() {

const url = "api.blabla.com/blabla"
const [status, setStatus] = useState("idle");
const [model, setModel] = useState({
  slug: "",
  name: ""
})
useEffect(() => {
  setStatus("pending");
  const axiosPosts = async () => {
    try{
    const response = await axios(url)
    setModel(response.data)
    setStatus("resolved")
   }catch(error){
    console.log(error);
    setStatus("rejected");
   }
  };
  axiosPosts();
}, []);

console.log(model.slug) //prints the slug!!

if(status === "pending"){
    return (<div>Loading...</div>)
}
if(status === "rejected"){
    return (<div>Something went wrong!</div>)
}
return (
  <div>
   {model.slug} : {model.name} // TypeError slug undefined
  </div>
)  

这为您更好地处理 API 呼叫及其响应提供了一个很好的优势。