【问题标题】:./src/actions/productActions.js Attempted import error: 'PRODUCT_LIST_FAIL' is not exported from '../reducers/productReducers'./src/actions/productActions.js 尝试导入错误:“PRODUCT_LIST_FAIL”未从“../reducers/productReducers”导出
【发布时间】:2021-10-25 08:25:31
【问题描述】:

我已经尝试了很多次来解决这个错误,但我做不到。 有了它,我不知道下一步该做什么。我已经尝试了各种方法来获得解决方案,但没有成功。

 import axios from "axios"
    import  {PRODUCT_DETAILS_FAIL,PRODUCT_DETAILS_REQUEST,PRODUCT_DETAILS_SUCCESS}  from "../constants/productConstants";
    import {PRODUCT_LIST_FAIL,PRODUCT_LIST_REQUEST,PRODUCT_LIST_SUCCESS}  from "../reducers/productReducers"
    
    const listProducts = () => async (dispatch) =>{
    try{
        dispatch({type:PRODUCT_LIST_REQUEST});
        const {data}= await axios.get("/api/products");
        dispatch({type:PRODUCT_LIST_SUCCESS,payload:data});
    }
    catch(error){
        dispatch({type:PRODUCT_LIST_FAIL,payload:error.message});
    }
    }
    const detailsProduct=(productId)=>async(dispatch)=>{
        try {
            dispatch({type:PRODUCT_DETAILS_REQUEST,payload:productId});
            const{data} =await axios.get("/api/products/"+productId);
            dispatch({type:PRODUCT_DETAILS_SUCCESS,payload:data});
        } catch (error) {
            dispatch({type:PRODUCT_DETAILS_FAIL,payload:error.message});
        }
    }
    
    
    export default{listProducts,detailsProduct};

产品减速器:

import { PRODUCT_LIST_FAIL, PRODUCT_LIST_REQUEST, PRODUCT_LIST_SUCCESS } from "../constants/productConstants";

function productListReducer(state= {products:[]},action){

    switch(action.type){
        case PRODUCT_LIST_REQUEST:
            return{loading:true};
        case PRODUCT_LIST_SUCCESS:
            return{loading:false, products:action.payload};
        case PRODUCT_LIST_FAIL:
            return{loading:false,error:action.payload};
         default:
            return state;
    }
}

export {productListReducer}

【问题讨论】:

  • 您能添加您的 productReducers 文件的代码吗?看起来您尚未从该文件中导出该常量。
  • 我加了先生
  • 是否有 PRODUCT_LIST_FAIL、PRODUCT_LIST_REQUEST、PRODUCT_LIST_SUCCESS 的两种变体?因为在主要组件中,您是从 productReducers 导入的,而在 productReducer 中,您是从 productConstants 导入的。
  • 是的,先生。我正在使用它的两种变体
  • 有什么解决办法?

标签: javascript reactjs react-native react-redux


【解决方案1】:

在您的代码中,您尝试从 reducer 文件中导入常量,但尚未从该文件中导出它们。此外,您还在 reducer 文件中导入了相同的常量。我认为您对导入和导出感到困惑。所以试试这个:

您应该在 ** productConstants** 文件中声明所有常量,如下所示: productConstants.js

export const PRODUCT_DETAILS_FAIL = 'PRODUCT_DETAILS_FAIL';
export const PRODUCT_DETAILS_REQUEST = 'PRODUCT_DETAILS_REQUEST';
export const PRODUCT_DETAILS_SUCCESS = 'PRODUCT_DETAILS_SUCCESS';

export const PRODUCT_LIST_FAIL = 'PRODUCT_LIST_FAIL';
export const PRODUCT_LIST_REQUEST = 'PRODUCT_LIST_REQUEST';
export const PRODUCT_LIST_SUCCESS = 'PRODUCT_LIST_SUCCESS';

现在,将这些常量导入到您的 reducer 文件和 action 文件中,如下所示:

您的操作文件:

import axios from "axios";
import {
  PRODUCT_DETAILS_FAIL,
  PRODUCT_DETAILS_REQUEST,
  PRODUCT_DETAILS_SUCCESS,
  // import these also from same file
  PRODUCT_LIST_FAIL,
  PRODUCT_LIST_REQUEST,
  PRODUCT_LIST_SUCCESS,
} from "../constants/productConstants";

const listProducts = () => async (dispatch) => {
  try {
    dispatch({ type: PRODUCT_LIST_REQUEST });
    const { data } = await axios.get("/api/products");
    dispatch({ type: PRODUCT_LIST_SUCCESS, payload: data });
  } catch (error) {
    dispatch({ type: PRODUCT_LIST_FAIL, payload: error.message });
  }
};
const detailsProduct = (productId) => async (dispatch) => {
  try {
    dispatch({ type: PRODUCT_DETAILS_REQUEST, payload: productId });
    const { data } = await axios.get("/api/products/" + productId);
    dispatch({ type: PRODUCT_DETAILS_SUCCESS, payload: data });
  } catch (error) {
    dispatch({ type: PRODUCT_DETAILS_FAIL, payload: error.message });
  }
};

export default { listProducts, detailsProduct };

React redux 应该有一个合适的文件来轻松实现工作。我在这里创建了React Native Redux Skeleton。检查初始文件结构。

【讨论】:

    【解决方案2】:

    您没有从您尝试在第一个文件中导入的productReducer 文件中导出命名常量。只需从productReducer 进行命名导出即可。

    import { PRODUCT_LIST_FAIL, PRODUCT_LIST_REQUEST, PRODUCT_LIST_SUCCESS } from "../constants/productConstants";
    //^^ avoid this import if not using anywhere in the file
    function productListReducer(state= {products:[]},action){
    
        switch(action.type){
            case PRODUCT_LIST_REQUEST:
                return{loading:true};
            case PRODUCT_LIST_SUCCESS:
                return{loading:false, products:action.payload};
            case PRODUCT_LIST_FAIL:
                return{loading:false,error:action.payload};
             default:
                return state;
        }
    }
    
    export productListReducer
    export const PRODUCT_LIST_FAIL = 'YOUR VALUE HERE'
    export const PRODUCT_LIST_REQUEST = 'YOUR VALUE HERE'
    export const PRODUCT_LIST_SUCCESS = 'YOUR VALUE HERE'
    

    但这可能会导致名称冲突,因为您在 productReducer 中导入具有相似名称的常量,因此如果您没有在 productReducer 中的其他任何地方使用,最好避免导入,因为常量的范围在reducer 函数的 switch 案例。

    【讨论】:

    • 万岁!你真是个聪明人,先生……我只是一个反应的初学者。我正在学习 B.E 计算机科学工程。你能指导我走向财富之路吗
    • 很高兴,问题已解决,感谢您的客气话。 YouTube上有很多关于react by academind、codevolution等的好教程,你可以关注播放列表。
    猜你喜欢
    • 2021-07-05
    • 2021-07-21
    • 2022-01-21
    • 2022-01-12
    • 2022-01-18
    • 2021-01-24
    • 2020-07-16
    • 1970-01-01
    相关资源
    最近更新 更多