面对Redux的问题

发布于 2025-02-12 17:01:12 字数 2180 浏览 1 评论 0原文

我正在尝试使用蚂蚁设计创建一个用于库存的表。我已经使用了React Redux来管理几个州。下面是给定的代码

import { Table } from 'antd';
import React, { useEffect } from 'react';
import { useSelector, useDispatch } from 'react-redux';
import {loadData} from '../../features/DataTableState/DataTableSlice';
const DataTable = () => {

  const gridData = useSelector((state) => state.dataTable.isGridData);
  const isLoading = useSelector((state) => state.dataTable.isLoading);
  const dispatch = useDispatch();

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


  const columns = [
    {
      title:'Id',
      dataIndex:'Id',
      align:'center',
    },
    {
      title:'product',
      dataIndex:'name',
      align:'center',
      editTable:true
    },
    {
      title:'description',
      dataIndex:'email',
      align:'center',
      editTable:true
    },
    {
      title:'inventory',
      dataIndex:'age',
      align:'center',
      editTable:false
    },
    {
      title:'Action',
      dataIndex:'action',
      align:'center',
    }

  ];

  return (
    <div className='data-table'>
     data table
    </div>
  );
}

export default DataTable

切片

import { createSlice } from "@reduxjs/toolkit";
import axios from "axios";

export const dataTableSlice = createSlice({
  name: "dataTable",
  initialState: {
    isGridData: [],
    isLoading: false,
  },
  reducers: {
    loadData: async (state) => {
      state.isLoading = true;
      const response = await axios.get(
        "https://jsonplaceholder.typicode.com/comments"
      );
      state.isGridData(response.data);
      state.isLoading = false;
    },
  },
});

export const { loadData } = dataTableSlice.actions;

export default dataTableSlice.reducer;

存储

import { configureStore } from "@reduxjs/toolkit";

import menuReducer from "../features/MenuState/menuSlice";
import dataTableReducer from "../features/DataTableState/DataTableSlice";

export default configureStore({
  reducer: {
    menu: menuReducer,
    dataTable: dataTableReducer,
  },
});

,一旦我使用使用效果或在组件中与任何其他功能创建我的网页一旦删除创建功能,我的网页就会空白。 我无法分类问题

I am trying to create a table for inventory using ant design. I have used react redux to manage few states. Below is the given code

import { Table } from 'antd';
import React, { useEffect } from 'react';
import { useSelector, useDispatch } from 'react-redux';
import {loadData} from '../../features/DataTableState/DataTableSlice';
const DataTable = () => {

  const gridData = useSelector((state) => state.dataTable.isGridData);
  const isLoading = useSelector((state) => state.dataTable.isLoading);
  const dispatch = useDispatch();

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


  const columns = [
    {
      title:'Id',
      dataIndex:'Id',
      align:'center',
    },
    {
      title:'product',
      dataIndex:'name',
      align:'center',
      editTable:true
    },
    {
      title:'description',
      dataIndex:'email',
      align:'center',
      editTable:true
    },
    {
      title:'inventory',
      dataIndex:'age',
      align:'center',
      editTable:false
    },
    {
      title:'Action',
      dataIndex:'action',
      align:'center',
    }

  ];

  return (
    <div className='data-table'>
     data table
    </div>
  );
}

export default DataTable

Slice

import { createSlice } from "@reduxjs/toolkit";
import axios from "axios";

export const dataTableSlice = createSlice({
  name: "dataTable",
  initialState: {
    isGridData: [],
    isLoading: false,
  },
  reducers: {
    loadData: async (state) => {
      state.isLoading = true;
      const response = await axios.get(
        "https://jsonplaceholder.typicode.com/comments"
      );
      state.isGridData(response.data);
      state.isLoading = false;
    },
  },
});

export const { loadData } = dataTableSlice.actions;

export default dataTableSlice.reducer;

store

import { configureStore } from "@reduxjs/toolkit";

import menuReducer from "../features/MenuState/menuSlice";
import dataTableReducer from "../features/DataTableState/DataTableSlice";

export default configureStore({
  reducer: {
    menu: menuReducer,
    dataTable: dataTableReducer,
  },
});

As soon as I am using useEffect or creating any other function with in the component my webpage is going blank as soon as I am deleting the created functions the page is going back to normal.
I am unable to sort the issue

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

黯然#的苍凉 2025-02-19 17:01:12

还原器不能异步。取而代之的是,将异步逻辑移动到异步thunk中,并使用extrareducers参数。

https://redux-toolkit.js.js.org/api/createasyncthunk

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

export const dataTableSlice = createSlice({
  name: 'dataTable',
  initialState: {
    isGridData: [],
    isLoading: false,
  },
  extraReducers: (builder) => {
    builder
      .addCase(loadData.pending, (state, action) => {
        state.isLoading = true;
      })
      .addCase(loadData.fulfilled, (state, action) => {
        state.isGridData = [...action.payload.data];
        state.isLoading = false;
      });
  },
});

export const loadData = createAsyncThunk('loadData', async () => {
  return await axios.get('https://jsonplaceholder.typicode.com/comments');
});

export default dataTableSlice.reducer;

Reducers cannot be async. Instead, move your async logic into an async thunk and use the extraReducers argument.

https://redux-toolkit.js.org/api/createAsyncThunk

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

export const dataTableSlice = createSlice({
  name: 'dataTable',
  initialState: {
    isGridData: [],
    isLoading: false,
  },
  extraReducers: (builder) => {
    builder
      .addCase(loadData.pending, (state, action) => {
        state.isLoading = true;
      })
      .addCase(loadData.fulfilled, (state, action) => {
        state.isGridData = [...action.payload.data];
        state.isLoading = false;
      });
  },
});

export const loadData = createAsyncThunk('loadData', async () => {
  return await axios.get('https://jsonplaceholder.typicode.com/comments');
});

export default dataTableSlice.reducer;

梦里泪两行 2025-02-19 17:01:12

也许它显示此错误,因为您不会以正确的方式添加价值

import { createSlice } from "@reduxjs/toolkit";
import axios from "axios";

export const dataTableSlice = createSlice({
 name: "dataTable",
 initialState: {
 isGridData: [],
 isLoading: false,
},
reducers: {
 loadData: async (state) => {
  state.isLoading = true;
  const response = await axios.get(
    "https://jsonplaceholder.typicode.com/comments"
  );
  state.isGridData.push(response.data);
  state.isLoading = false;
 },
},
});

export const { loadData } = dataTableSlice.actions;

export default dataTableSlice.reducer;

Maybe it shows this error because you don't add value in correct manner into the array

import { createSlice } from "@reduxjs/toolkit";
import axios from "axios";

export const dataTableSlice = createSlice({
 name: "dataTable",
 initialState: {
 isGridData: [],
 isLoading: false,
},
reducers: {
 loadData: async (state) => {
  state.isLoading = true;
  const response = await axios.get(
    "https://jsonplaceholder.typicode.com/comments"
  );
  state.isGridData.push(response.data);
  state.isLoading = false;
 },
},
});

export const { loadData } = dataTableSlice.actions;

export default dataTableSlice.reducer;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文