#javascript #reactjs
#javascript #reactjs
Вопрос:
Я продолжаю получать эту ошибку: TypeError: не удается прочитать свойство «данные» неопределенного, когда на мою страницу корзины покупок не передаются данные. Как я могу исправить эту ошибку? В идеале я бы просто хотел, чтобы на странице отображалось: «Эта корзина пуста». Я попытался добавить условный оператор над UserCardBlock, но это ничего не изменило. Спасибо
import React, { useState } from 'react'
import { useDispatch } from 'react-redux';
import {
removeCartItem,
onSuccessBuy
} from '../../../_actions/user_actions';
import UserCardBlock from './Sections/UserCardBlock';
import { Result, Empty, Button } from 'antd';
import Paypal from '../../utils/Paypal';
function CartPage(props) {
const dispatch = useDispatch();
console.log(props)
const [Total, setTotal] = useState(props.location.state.data.price)
const [ShowTotal, setShowTotal] = useState(true)
const [ShowSuccess, setShowSuccess] = useState(false)
const removeFromCart = (productId) => {
dispatch(removeCartItem(productId))
}
const transactionSuccess = (data) => {
dispatch(onSuccessBuy({
cartDetail: props.user.cartDetail,
paymentData: data
}))
.then(response => {
setShowSuccess(true)
setShowTotal(false)
}
)
}
const transactionError = () => {
console.log('Paypal error')
}
const transactionCanceled = () => {
console.log('Transaction canceled')
}
const propductList = (data) =>{
console.log(data)
setTotal(data)
}
return (
<div style={{ width: '85%', margin: '3rem auto' }}>
<h1>My Cart</h1>
<div>
<UserCardBlock
productData={props.location.state.data}
removeItem={removeFromCart}
productList={data => propductList(data)}
/>
{ShowTotal ? (
<div style={{ marginTop: "3rem" }}>
<h2>Total amount: ${Total * 15} </h2>
</div>
) : ShowSuccess ? (
<Result status="success" title="Successfully Purchased Items" />
) : (
<div
style={{
width: "100%",
display: "flex",
flexDirection: "column",
justifyContent: "center",
}}
>
<br />
<Empty description={false} />
<p>No Items In The Cart</p>
</div>
)}
</div>
{/* Paypal Button */}
{ShowTotal amp;amp;
<Paypal
toPay={Total}
onSuccess={transactionSuccess}
transactionError={transactionError}
transactionCanceled={transactionCanceled}
/>
}
</div>
)
}
export default CartPage
Комментарии:
1.
data=>propductList(data)
должно быть изменено на()=>propductList(data)
2. Я пытался заставить список продуктов считывать вмененные данные со страницы загрузки
3. где именно вы получаете ошибку?
Ответ №1:
Похоже, что ваш компонент зависит от состояния местоположения.
const [Total, setTotal] = useState(props.location.state.data.price)
и
<UserCardBlock
productData={props.location.state.data}
Попробуйте использовать необязательную цепочку и нулевое объединение
const [Total, setTotal] = useState(props.location?.state?.data?.price ?? 0)
<UserCardBlock
productData={props.location.state?.data ?? []}
Похоже, вы используете redux, поэтому я предложу вам использовать redux store вместо состояния местоположения.