当前位置: 首页 > 知识库问答 >
问题:

获取时不要获取数据

查学文
2023-03-14

我有一个使用redux的应用程序
我也曾在本地获取数据。

return fetch("https://dog.ceo/api/breeds/image/random").then(res => res.json());

在我的反应组件中,我使用useSelector来获取数据。但我什么也没得到。

 useEffect(() => {
    console.log(selector.data); // here i should get data
  }, []);

如何在我的组件中获取数据?

演示:https://codesandbox.io/s/nervous-rosalind-lp16j?file=/src/App.js:242-328

共有1个答案

邢宏浚
2023-03-14

我能够将数据提取到您的应用程序组件中。我必须做一点重构才能做到这一点。

  1. 将存储移动到您的索引。js文件
//index.js
import React from "react";
import ReactDOM from "react-dom";
import createSagaMiddleware from "redux-saga";
import { createStore, applyMiddleware } from "redux";
import reducer from "./saga/reducers";
import rootSaga from "./saga/saga";
import { Provider } from "react-redux";
import App from "./App";

const sagaMiddleware = createSagaMiddleware();

const store = createStore(reducer, applyMiddleware(sagaMiddleware));
sagaMiddleware.run(rootSaga);

const rootElement = document.getElementById("root");
ReactDOM.render(
  <Provider store={store}>
    <React.StrictMode>
      <App />
    </React.StrictMode>
  </Provider>,
  rootElement
);

//sagas/actions.js
export const fetchDogs = () => ({
  type: "FETCH_DOGS"
});
//sagas/reducers.js
const reducer = (state = {}, action) => {
  switch (action.type) {
    case "FETCH_DOGS":
      return { ...state, loading: true };

    case "DOGS_RECIEVED":
      return { ...state, dogs: action.data, loading: false };

    default:
      return state;
  }
};

export default reducer;
//sagas/saga.js
import { put, takeLatest, all } from "redux-saga/effects";

function* actionWatcher() {
  yield takeLatest("FETCH_DOGS", fetchDataAsync);
}
function* fetchDataAsync() {
  try {
    const json = yield fetch("https://dog.ceo/api/breeds/image/random").then(
      response => response.json()
    );
    console.log(json);
    yield put({ type: "DOGS_RECIEVED", data: json.message });
  } catch (error) {
    console.log(error);
  }
}

export default function* rootSaga() {
  yield all([actionWatcher()]);
}
//App.js
import React, { useEffect } from "react";
import "./styles.css";
import { fetchDogs } from "./saga/actions";
import { useDispatch, useSelector } from "react-redux";

export default function App() {
  const dogs = useSelector(state => state.dogs);
  const loading = useSelector(state => state.loading);

  const dispatch = useDispatch();
  useEffect(() => {
    dispatch(fetchDogs());
  }, []);

  if (loading) {
    return "Loading...";
  }

  console.log(dogs);

  return (
    <div className="App">
      <h1>Dogs</h1>
      <img src={dogs} alt="new" />
    </div>
  );
}

这里有一个指向沙盒的链接。

 类似资料:
  • 我刚到Angular 2还在学习,我正在尝试用get调用击一个URL,但get似乎不通过,即使在浏览器的网络中,我也找不到被调用的get URL。 程序将转到方法控制台,在get调用的上下记录日志,但不记录get调用的日志 我的服务方式

  • 我制作了一个自定义方法,该方法应用@Query注释以从 SQL 数据库中提取数据。该方法使用字符串和可分页作为参数。该 Pageable 包含我的分页信息,例如请求的页面、出现次数限制、排序方向和属性。 每当我的 Pageable 传递属性名称进行排序时,Hibernate 都会使用相同的名称在 DB 上查找列,即使我在模型上注释了另一个列名。我在示例查询或派生方法实现方面没有遇到此问题。 我已经

  • 问题内容: 在执行此代码时,我在第81行上收到了java.lang.UnsupportedOperationException。我知道发布整个代码违反了赌注的做法,但是我认为除非发布整个代码,否则传达我正在做的事情将非常困难。 基本上,我想从列表中删除所有出现的元素,所以我正在做List.removeAll(Collection)。我不明白在81号线上我在做什么错。谢谢您的帮助! 输出/ Stac

  • 我试图创建一个chatbot,它向spring-boot应用程序发出get请求,而spring boot应用程序向Dialogflow V2发出API调用。我试图通过GRPC访问Dialogflow V2 API。我已经创建了一个服务帐户和导出服务帐户密钥文件,并将其添加到spring-boot应用程序中。 当我试图从spring-boot应用程序向dialogflow发送请求时,我出现了以下错误

  • 问题内容: 我试图连接到在WebSphere上运行的Java应用程序内的Oracle数据库。我需要能够创建一个数组描述符以在对过程的调用中使用。 代码如下: 调用的行引发类强制转换异常 通过调试器进行遍历,可以肯定是一个。问题是我实际上不能在我的代码中引用该类,因为该类不是公共的,所以我不能只做这样的事情: 。 还有这个: 还返回类强制转换异常: 我需要有一个对象,但似乎无法从返回给我的对象中得到