reactjs - 为什么我的状态是未定义的,即使我正在设置它
问题描述
我是 React 和 Redux 的新手。我想问一下为什么当我尝试使用它或在控制台中显示它时在 setState 中设置一个对象是未定义的。
import React, { useEffect, useState } from 'react';
import { Link } from 'react-router-dom';
import { Row, Col } from "react-bootstrap";
import axios from 'axios';
import ProductImage from './Sections/ProductImage';
import ProductInfo from './Sections/ProductInfo';
function DetailProduct (props){
const productId = props.match.params.productId
const [Product, setProduct] = useState()
useEffect(()=>{
axios.get('http://localhost:5000/products/'+productId)
.then(response =>{
setProduct(response.data)
console.log('state '+Product._id)
})
}, [])
return (
<div className="postPage" style={{width: '100%', padding: '3rem 4rem'}}>
<div style={{display:'flex',justifyContent:'center'}}>
<h1>{Product._id}</h1>
</div>
<br/>
<Row gutter={[16, 16]}>
<Col lg={12} xs={24}>
<ProductImage />
</Col>
<Col lg={12} xs={24}>
<ProductInfo />
</Col>
</Row>
</div>
)
}
export default DetailProduct
当页面加载时,它说 Product 是未定义的,即使它假设有一个对象。当我 console.log 有什么 response.data 时,它会向我显示产品需要拥有的信息。抱歉英语不好,谢谢。
解决方案
问题是当组件第一次渲染时,axios 请求还没有完成运行。届时,Product
将是您设置为默认值的任何内容。在这种情况下,您没有设置默认值,Product
因此它是未定义的。您可以像这样在 useState 中执行此操作const [Product, setProduct] = useState({})
解决此问题的另一种方法是将组件包装在 if 语句中,以检查是否Product
已设置。
{Product && (
<div>your component here</div>
)}
推荐阅读
- django - 我想使用对象中的字段来过滤产品
- powershell - 什么相当于 Windows 10 PowerShell 中的 bash/shell/UNIX-terminal 命令“which”?
- node.js - Express Validator 的值无效
- c# - _highScore.text 游戏结束时不更新
- amazon-web-services - Cloudfront 设置显示来自云端的 Miss
- scalapack - 用于分配阵列的阻塞因子是什么?
- go - 将字节数组传递到 Azure 存储队列
- jakarta-ee - Wildfly JavaEE 8 - Singleton EJB 的双重初始化
- chart.js - Chart.js 第一次不显示
- vue.js - nginx配置中没有调用静态文件