Reactjs TypeError:无法分解属性';产品';属于';产品详细信息';因为它是未定义的

Reactjs TypeError:无法分解属性';产品';属于';产品详细信息';因为它是未定义的,reactjs,redux,store,Reactjs,Redux,Store,**ProductDetailsScreen.js>>>这是我的代码,我从Redux商店获得了产品列表,但在初始化产品详细信息时遇到了问题** export default function ProductDetilsScreen(props) { const dispatch = useDispatch(); const productId = props.match.params.id; const productDetails = useSelector((state) =&g

**ProductDetailsScreen.js>>>这是我的代码,我从Redux商店获得了产品列表,但在初始化产品详细信息时遇到了问题**

export default function ProductDetilsScreen(props) {
  const dispatch = useDispatch();
  const productId = props.match.params.id;
  const productDetails = useSelector((state) => state.productDetails);
  const { loading, error, product } = productDetails;

  useEffect(() => {
    dispatch(detailsProduct(productId));
  }, [dispatch, productId]);

export const productDetailsReducer = (
  state = { product: {}, loading: true },
  action
) => {
  switch (action.type) {
    case PRODUCT_DETAILS_REUEST:
      return { loading: true };
    case PRODUCT_DETAILS_SUCCESS:
      return { loading: false, product: action.payload };
    case PRODUCT_DETAILS_FAIL:
      return { loading: false, error: action.payload };
    default:
      return state;
  }
};
import { applyMiddleware, combineReducers, compose, createStore } from "redux";
import thunk from "redux-thunk";
import { productDetailsReducer, productListReducer } from "./productReducers";

const initialState = {};

const reducer = combineReducers({
  productList: productListReducer,
  productDetils: productDetailsReducer,
});
const composeEnhancer = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
const store = createStore(
  reducer,
  initialState,
  composeEnhancer(applyMiddleware(thunk))
);

export default store;
**productActions.js>>这是我的代码,我从Redux商店获得了产品列表,但在初始化产品详细信息时遇到了问题**


export const detailsProduct = (productId) => async (dispatch) => {
  dispatch({
    type: PRODUCT_DETAILS_REUEST,
    payload: productId,
  });
  try {
    const { data } = await Axios.get(`/api/products/${productId}`);
    dispatch({
      type: PRODUCT_DETAILS_SUCCESS,
      payload: data,
    });
  } catch (error) {
    dispatch({
      type: PRODUCT_DETAILS_FAIL,
      payload:
        error.response && error.response.data.message
          ? error.response.data.message
          : error.message,
    });
  }
};
**productReducer.js>>>这是我的代码,我从Redux商店获得了产品列表,但在初始化产品详细信息时遇到了问题**

export default function ProductDetilsScreen(props) {
  const dispatch = useDispatch();
  const productId = props.match.params.id;
  const productDetails = useSelector((state) => state.productDetails);
  const { loading, error, product } = productDetails;

  useEffect(() => {
    dispatch(detailsProduct(productId));
  }, [dispatch, productId]);

export const productDetailsReducer = (
  state = { product: {}, loading: true },
  action
) => {
  switch (action.type) {
    case PRODUCT_DETAILS_REUEST:
      return { loading: true };
    case PRODUCT_DETAILS_SUCCESS:
      return { loading: false, product: action.payload };
    case PRODUCT_DETAILS_FAIL:
      return { loading: false, error: action.payload };
    default:
      return state;
  }
};
import { applyMiddleware, combineReducers, compose, createStore } from "redux";
import thunk from "redux-thunk";
import { productDetailsReducer, productListReducer } from "./productReducers";

const initialState = {};

const reducer = combineReducers({
  productList: productListReducer,
  productDetils: productDetailsReducer,
});
const composeEnhancer = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
const store = createStore(
  reducer,
  initialState,
  composeEnhancer(applyMiddleware(thunk))
);

export default store;
**Store.js>>>这是我的代码,我从Redux商店获得了产品列表,但在初始化产品详细信息时遇到了问题**

export default function ProductDetilsScreen(props) {
  const dispatch = useDispatch();
  const productId = props.match.params.id;
  const productDetails = useSelector((state) => state.productDetails);
  const { loading, error, product } = productDetails;

  useEffect(() => {
    dispatch(detailsProduct(productId));
  }, [dispatch, productId]);

export const productDetailsReducer = (
  state = { product: {}, loading: true },
  action
) => {
  switch (action.type) {
    case PRODUCT_DETAILS_REUEST:
      return { loading: true };
    case PRODUCT_DETAILS_SUCCESS:
      return { loading: false, product: action.payload };
    case PRODUCT_DETAILS_FAIL:
      return { loading: false, error: action.payload };
    default:
      return state;
  }
};
import { applyMiddleware, combineReducers, compose, createStore } from "redux";
import thunk from "redux-thunk";
import { productDetailsReducer, productListReducer } from "./productReducers";

const initialState = {};

const reducer = combineReducers({
  productList: productListReducer,
  productDetils: productDetailsReducer,
});
const composeEnhancer = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
const store = createStore(
  reducer,
  initialState,
  composeEnhancer(applyMiddleware(thunk))
);

export default store;

这里似乎有一个可能导致问题的输入错误

//Store.js文件中的ProductDetails
常数减速机=组合减速机({
productList:productListReducer,
ProductDetails:ProductDetails还原程序,
});
//ProductDetailsScreen.js文件中的productDetails
const productDetails=useSelector((state)=>state.productDetails);
const{loading,error,product}=productDetails;
试着纠正这个粗心的错误


除此之外,似乎没有什么是不寻常的。您的
productDetails
的初始状态为
state={product:{},loading:true}
似乎是正确的。

面临的问题只是一个问题