为啥我使用 redux 时 axios.get 不起作用?

Posted

技术标签:

【中文标题】为啥我使用 redux 时 axios.get 不起作用?【英文标题】:Why axios.get doesn't work when I use redux?为什么我使用 redux 时 axios.get 不起作用? 【发布时间】:2021-06-19 20:42:18 【问题描述】:

我正在使用 json 文件中的图片创建一个页面。在我添加 redux 之前它一直有效。我是redus的新手,所以我希望你能帮助我找到我的错误。谢谢。

import React,  useEffect  from "react";
import  useDispatch, useSelector  from "react-redux";
import  getCards  from "../cardsActions";
import PortfolioItem from "../Pages/PortfolioItem";

export default function Portfolio() 

  const dispatch = useDispatch();
  const cardsListData = useSelector((state) => state.cardsList);
  const  loading, error, cards  = cardsListData;
  useEffect(() => 
    dispatch(getCards());
  , [dispatch]);

  return (
    <div className="container">
      <div className="portfolio-wrapper">
        loading
          ? "Loading..."
          : error
          ? error.message
          : cards.map((card) => <PortfolioItem key=card.id ...card />)
      </div>
    </div>
  );

cardReducer.js

const initialState = 
  cards: [],
  loading: true
;

export default function (state = initialState, action) 
  switch (action.type) 
    case GET_CARDS:
      return 
        ...state,
        users: action.payload,
        loading: false
      ;
    case CARDS_ERROR:
      return 
        loading: false,
        error: action.payload
      ;
    default:
      return state;
  

这里是完整代码:https://codesandbox.io/s/naughty-mcclintock-di9bb?file=/src/cardsActions.js

【问题讨论】:

axios逻辑在哪里?这是否包含在异步操作中?您的代码沙箱缺少一些文件并且无法运行。您的服务器是否在http://localhost:3003 上运行?提取时是否看到错误?你能更好地描述一下 redux 到底是什么不工作吗? @DrewReese 我刚刚在codesandbox中添加了完整的代码。 我在代码和框中收到此错误Could not find module in path: '../Pages/PortfolioItem' relative to '/src/Pages/Portfolio.js'。您的问题不可重现。 Portfolio 中存在关于如何导入组件的问题(路径错误)。我同意这个问题无法重现,因为在 package.json 中也缺少 react-boostrap 依赖项。 @daryalewy 如果您真的想获得帮助,请查看您的代码并更新帖子。 @yudhiesh 我完成了代码并添加了我拥有的所有内容。 codesandbox.io/s/naughty-mcclintock-di9bb?file=/src/… 【参考方案1】:

看来您将卡片添加到了 redux 商店中的错误键:

case GET_CARDS:
  return 
    ...state,
    users: action.payload, // <-- users isn't accessed in UI
    loading: false
  ;

您可以访问state.cardsList.cards。将有效负载保存到您状态的 cards 部分。

case GET_CARDS:
  return 
    ...state,
    cards: action.payload, // <-- save payload to cards state
    loading: false
  ;

我不得不模拟一个 JSON API 端点,但只需将其换出,我就可以继续跟踪您的代码。除非您的特定本地服务器设置出现任何问题(即假设您的服务器正确提供了 portfolio-data.json 文件),否则这至少应该解决您的更新状态和 UI 问题。

【讨论】:

以上是关于为啥我使用 redux 时 axios.get 不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

使用 axios 和 redux-thunk 以 redux-form 发布请求

包含 axios GET 调用的 React-Redux 应用程序测试操作创建者

Redux 工具包和 Axios

为啥从远程 AWS S3 服务器下载 json 文件时 axios GET 错误

Redux axios 请求取消

REACT 如何使用 Redux 和 Axios(使用 promise 中间件)发出 AJAX 请求?