React-TypeScript-Redux-Toolkit:无法获取嵌套的api

克里斯纳

我正在用打字稿练习redux-toolkit。我使用了一个开放的api,并且使用redux工具箱的来获取数据createAsyncThunk我成功获取了应用程序组件中的数据。当我控制台记录它时,我可以看到数据,但是一旦映射,就会data.result出现错误:TypeError: Cannot read property 'map' of undefined我认为使用界面时出现Typescript错误。但是看不到问题出在哪里,而且在Chrome的reduxdevtools中也看不到:data期望对象,但我放置了数组。我的redux-devtools看起来像我在Codesand Box中共享了我的代码

PS: I am sharing only these two files below because I think this is where I making mistakes

这是我的减速机,我认为我在类型上犯了错误

import { createSlice, createAsyncThunk } from "@reduxjs/toolkit";

export const dataFetch = createAsyncThunk(
  `store/dataFetch`,
  async () => {
    const url = `https://rickandmortyapi.com/api/character`;
    const response = await fetch(url);
    const data = await response.json();
    return data;
  }
);

interface Meta {
  loading: boolean;
  error: boolean;
  message: string;
}
// This is where I am making mistake
interface Results {
  name: string;
  image: string;
  gender: string;
  species: string;
  status: string;
}

interface Info {
  count: number;
  pages: number;
}

interface User {
  results: Results[];
  info: Info;

}

export interface IUser {
  meta: Meta;
  data: User[];
}

const initialState: IUser = {
  "meta": {
    "loading": false,
    "error": false,
    "message": ``
  },
  "data": []
};

const UserSlice = createSlice({
  "name": `JsonPlacehoder user`,
  initialState,
  "reducers": {

  },
  "extraReducers": (builder) => {
    builder.addCase(dataFetch.pending, (state) => (
      {
        ...state,
        "meta": {
          ...state.meta,
          "loading": true
        }
      }
    ));
    builder.addCase(dataFetch.fulfilled, (state, { payload }) => (
      {
        ...state,
        "meta": {
          ...state.meta,
          "loading": false,
          "error": false,
          "message": ``
        },
        "data": payload
      }
    ));
    builder.addCase(dataFetch.rejected, (state, { error }) => {
      window.alert(error?.message);
      return {
        ...state,
        "meta": {
          "loading": false,
          "error": true,
          "message": error?.message || ``
        }
      };
    });
  }
});

export default UserSlice.reducer;

这是我使用map函数时出现错误的组件

import React, { useEffect } from 'react';

import { useSelector, useDispatch } from 'react-redux'

import { dataFetch } from './store/reducers';
import { IRootState } from './store/combineReducers';

function App() {

  const { data, meta } = useSelector((rootState: IRootState) => rootState.fetchUser);

  console.log(data);

  const dispatch = useDispatch()


  useEffect(() => {
    dispatch(dataFetch())
  }, [dispatch])

  return (
    <div className="App">
      {
        data.results.map(i => { //GETTING ERROR
          return <div>
            <h1>{i.name}</h1>
          </div>
        })
      }
    </div>
  );
}

export default App;
y

那是因为您试图.map在数据获取还没有开始之前覆盖数据。

你的useEffect后触发第一次呈现。在此之前,您已经尝试过.map一次。即使这样,在加载过程中,组件也可能会重新呈现。

结合起来,您的某些化简趋向于实际上删除该data属性,而不是保留属性data: [](我在那儿等待中),这导致data在某些渲染器上未定义。

ATypeError实际上不是TypeScript错误(这些错误始终以“ ts”开头,后跟数字),而是JavaScript运行时错误。因此,您这里确实发生了“运行时崩溃”。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

React - 无法从 Redux 获取数据

来自分类Dev

基本 React Native + TypeScript + redux-forms

来自分类Dev

获取props.dispatch()的类型定义,以将TypeScript与React-Redux一起使用

来自分类Dev

在我的React应用程序中通过Redux分派获取TypeScript错误

来自分类Dev

React / Redux + Soundcloud API

来自分类Dev

使用TypeScript和React-Redux时推断映射的道具

来自分类Dev

Typescript无状态HOC react-redux注入的道具打字

来自分类Dev

TypeScript使用React-Redux删除重复的属性分配

来自分类Dev

React / TypeScript / Redux / Thunk操作未调度,状态未更新

来自分类Dev

如何正确使用 react-redux 与 typescript@3 连接?

来自分类Dev

React-Redux-Hooks API

来自分类Dev

Redux Observable、React、componentDidMount 从 API 中获取无法从对象中获取属性

来自分类Dev

React Redux重命名API响应中的嵌套对象

来自分类Dev

使用Redux Toolkit和Typescript反应可观察的史诗

来自分类Dev

React Redux处理大型嵌套树更新

来自分类Dev

Immer React Native Redux嵌套对象

来自分类Dev

React Native / Redux-无法访问Redux存储

来自分类Dev

具有react-redux组件的React Typescript需要所有传递的道具

来自分类Dev

API发布成功后,调度获取请求-React / Redux

来自分类Dev

React-Redux API获取请求操作不执行?

来自分类Dev

React Redux Axios Api使用路径参数获取呼叫

来自分类Dev

从react-router-redux获取当前位置

来自分类Dev

从HTML获取数据到React / Redux

来自分类Dev

React Redux从后端方法获取数据

来自分类Dev

从HTML获取数据到React / Redux

来自分类Dev

如何使用redux在react中获取数据?

来自分类Dev

使用Typescript的React的Context API

来自分类Dev

React Redux无法解析自己的模块

来自分类Dev

无法从redux接收react组件中的状态

Related 相关文章

  1. 1

    React - 无法从 Redux 获取数据

  2. 2

    基本 React Native + TypeScript + redux-forms

  3. 3

    获取props.dispatch()的类型定义,以将TypeScript与React-Redux一起使用

  4. 4

    在我的React应用程序中通过Redux分派获取TypeScript错误

  5. 5

    React / Redux + Soundcloud API

  6. 6

    使用TypeScript和React-Redux时推断映射的道具

  7. 7

    Typescript无状态HOC react-redux注入的道具打字

  8. 8

    TypeScript使用React-Redux删除重复的属性分配

  9. 9

    React / TypeScript / Redux / Thunk操作未调度,状态未更新

  10. 10

    如何正确使用 react-redux 与 typescript@3 连接?

  11. 11

    React-Redux-Hooks API

  12. 12

    Redux Observable、React、componentDidMount 从 API 中获取无法从对象中获取属性

  13. 13

    React Redux重命名API响应中的嵌套对象

  14. 14

    使用Redux Toolkit和Typescript反应可观察的史诗

  15. 15

    React Redux处理大型嵌套树更新

  16. 16

    Immer React Native Redux嵌套对象

  17. 17

    React Native / Redux-无法访问Redux存储

  18. 18

    具有react-redux组件的React Typescript需要所有传递的道具

  19. 19

    API发布成功后,调度获取请求-React / Redux

  20. 20

    React-Redux API获取请求操作不执行?

  21. 21

    React Redux Axios Api使用路径参数获取呼叫

  22. 22

    从react-router-redux获取当前位置

  23. 23

    从HTML获取数据到React / Redux

  24. 24

    React Redux从后端方法获取数据

  25. 25

    从HTML获取数据到React / Redux

  26. 26

    如何使用redux在react中获取数据?

  27. 27

    使用Typescript的React的Context API

  28. 28

    React Redux无法解析自己的模块

  29. 29

    无法从redux接收react组件中的状态

热门标签

归档