无法读取未定义的属性(读取 'defaultSize')
Cannot read properties of undefined (reading 'defaultSize')
我正在尝试在我的 MERN 项目中使用 useState,并且我在 MongoDB 中定义了 defaultSize,并且正在尝试通过 product.defaultSize
来使用 State。如果我更改我的一些代码(例如添加 console.log("hello"))并保存它,错误就会消失并正常加载。但是如果我刷新页面,错误又回来了?
import { useEffect, useState } from "react";
import { getProductDetails } from "../redux/actions/productActions";
import { SizeOptions } from '../components/SizeOptions';
const ProductScreen = ({match}) => {
const dispatch = useDispatch();
const productDetails = useSelector(state => state.getProductDetails);
const { loading, error, product } = productDetails;
const [ src, setSrc ] = useState(product.defaultSize);
useEffect(() => {
if (product && match.params.id !== product._id) {
dispatch(getProductDetails(match.params.id));
}
}, [dispatch, match, product]);
<div className='sizebuttons'>
{product && (product.size || []).map((size, index) => (<SizeOptions key={index} size={size} changeSrc={src => setSrc(src)}/>))}
</div>
return (
<model-viewer
id="model-viewer"
src={src}
alt={product.productName}
ar
ar-modes="scene-viewer quick-look"
ar-placement="floor"
shadow-intensity="1"
camera-controls
min-camera-orbit={product.mincameraorbit}
max-camera-orbit={product.maxcameraorbit}
interaction-prompt="none">
<button slot="ar-button" className="ar-button">
View in your space
</button>
</model-viewer>
)};
我也尝试过将其更改为 useState(product?.defaultSize);
,因为我在这里看到另一个 post 说可以,但我没有成功。如您所知,所有其他 product.otherstuff
工作正常。任何帮助将不胜感激!
import { useEffect, useState } from "react";
import { getProductDetails } from "../redux/actions/productActions";
import { SizeOptions } from '../components/SizeOptions';
const ProductScreen = ({match}) => {
const dispatch = useDispatch();
const productDetails = useSelector(state => state.getProductDetails);
const { loading, error, product } = productDetails;
const [ src, setSrc ] = useState();
useEffect(() => {
if (product && match.params.id !== product._id) {
dispatch(getProductDetails(match.params.id));
}
}, [dispatch, match, product]);
<div className='sizebuttons'>
{product && (product.size || []).map((size, index) => (<SizeOptions key={index} size={size} changeSrc={src => setSrc(src)}/>))}
</div>
return (
<model-viewer
id="model-viewer"
src={src || product.defaultSize}
alt={product.productName}
ar
ar-modes="scene-viewer quick-look"
ar-placement="floor"
shadow-intensity="1"
camera-controls
min-camera-orbit={product.mincameraorbit}
max-camera-orbit={product.maxcameraorbit}
interaction-prompt="none">
<button slot="ar-button" className="ar-button">
View in your space
</button>
</model-viewer>
)};
我正在尝试在我的 MERN 项目中使用 useState,并且我在 MongoDB 中定义了 defaultSize,并且正在尝试通过 product.defaultSize
来使用 State。如果我更改我的一些代码(例如添加 console.log("hello"))并保存它,错误就会消失并正常加载。但是如果我刷新页面,错误又回来了?
import { useEffect, useState } from "react";
import { getProductDetails } from "../redux/actions/productActions";
import { SizeOptions } from '../components/SizeOptions';
const ProductScreen = ({match}) => {
const dispatch = useDispatch();
const productDetails = useSelector(state => state.getProductDetails);
const { loading, error, product } = productDetails;
const [ src, setSrc ] = useState(product.defaultSize);
useEffect(() => {
if (product && match.params.id !== product._id) {
dispatch(getProductDetails(match.params.id));
}
}, [dispatch, match, product]);
<div className='sizebuttons'>
{product && (product.size || []).map((size, index) => (<SizeOptions key={index} size={size} changeSrc={src => setSrc(src)}/>))}
</div>
return (
<model-viewer
id="model-viewer"
src={src}
alt={product.productName}
ar
ar-modes="scene-viewer quick-look"
ar-placement="floor"
shadow-intensity="1"
camera-controls
min-camera-orbit={product.mincameraorbit}
max-camera-orbit={product.maxcameraorbit}
interaction-prompt="none">
<button slot="ar-button" className="ar-button">
View in your space
</button>
</model-viewer>
)};
我也尝试过将其更改为 useState(product?.defaultSize);
,因为我在这里看到另一个 post 说可以,但我没有成功。如您所知,所有其他 product.otherstuff
工作正常。任何帮助将不胜感激!
import { useEffect, useState } from "react";
import { getProductDetails } from "../redux/actions/productActions";
import { SizeOptions } from '../components/SizeOptions';
const ProductScreen = ({match}) => {
const dispatch = useDispatch();
const productDetails = useSelector(state => state.getProductDetails);
const { loading, error, product } = productDetails;
const [ src, setSrc ] = useState();
useEffect(() => {
if (product && match.params.id !== product._id) {
dispatch(getProductDetails(match.params.id));
}
}, [dispatch, match, product]);
<div className='sizebuttons'>
{product && (product.size || []).map((size, index) => (<SizeOptions key={index} size={size} changeSrc={src => setSrc(src)}/>))}
</div>
return (
<model-viewer
id="model-viewer"
src={src || product.defaultSize}
alt={product.productName}
ar
ar-modes="scene-viewer quick-look"
ar-placement="floor"
shadow-intensity="1"
camera-controls
min-camera-orbit={product.mincameraorbit}
max-camera-orbit={product.maxcameraorbit}
interaction-prompt="none">
<button slot="ar-button" className="ar-button">
View in your space
</button>
</model-viewer>
)};