【发布时间】:2021-11-25 18:05:01
【问题描述】:
传递产品 ID 后,我将被重定向到产品详细信息页面。在该页面中,我有产品的详细信息,例如名称、目的地、价格和日期等。当我使用redux 并从mongodb 获取数据时,日期保存为2021-11-23T18:00:00.000Z 这种格式。因此,在我的产品详细信息页面中获取数据后,我使用flight?.data?.date.split("T")[0] 仅显示日期。但是在单击按钮进入产品详细信息页面后,它显示以下错误TypeError: Cannot read properties of undefined (reading 'split')。但是当我从代码中删除 split 部分时,它工作正常。我猜唯一的原因是代码在加载数据之前正在运行。因此,为此我尝试通过调度加载操作在数据加载之前显示加载微调器。但它不起作用。我已经将redux thunk 用于其他操作,这就是我在操作中添加异步的原因。否则它会给我dispatch is not defined。
详情页面
import { CircularProgress } from "@mui/material";
import React, { useEffect } from "react";
import { useSelector, useDispatch } from "react-redux";
import { useParams } from "react-router-dom";
import { getFlight, loadingStatus } from "../../actions/flights";
import "./Details.css";
const FlightDetails = () => {
const flight = useSelector((state) => state.flights);
console.log("flight", flight.loading);
const dispatch = useDispatch();
const { id } = useParams();
useEffect(() => {
dispatch(loadingStatus(true));
dispatch(getFlight(id));
dispatch(loadingStatus(false));
}, [id, dispatch]);
return (
<div className="details_parent">
{flight.loading ? (
<CircularProgress />
) : (
<div className="details_container">
<div className="form_data">
<span>From</span>
<h3>{flight?.data?.from}</h3>
</div>
<div className="form_data">
<span>To</span>
<h3>{flight?.data?.to}</h3>
</div>
<div className="form_data">
<span>Airline</span>
<h3>{flight?.data?.airline}</h3>
</div>
<div className="form_data">
<span>Trip type</span>
<h3>{flight?.data?.flightType}</h3>
</div>
<div className="form_data">
<span>Date(yyyy-mm-dd)</span>
<h3>{flight?.data?.date.split("T")[0]}</h3>
</div>
<div className="form_data">
<span>Price</span>
<h1>${flight?.data?.price}</h1>
</div>
</div>
)}
</div>
);
};
export default FlightDetails;
减速器
const initialState = {
data: [],
loading: false,
};
const reducer = (state = initialState, action) => {
switch (action.type) {
case "GET_FLIGHTS":
return { ...state, data: action.payload };
case "GET_FLIGHT":
return { ...state, data: action.payload };
case "CREATE_FLIGHT":
return { ...state, data: { ...action.payload } };
case "SEARCH":
return { ...state, data: action.payload };
case "LOADING":
return { ...state, loading: action.payload };
default:
return state;
}
};
export default reducer;
操作
export const loadingStatus = (status) => async (dispatch) => {
dispatch({
type: "LOADING",
payload: status,
});
};
【问题讨论】:
标签: reactjs react-redux