首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redux Reselect没有从api获取数据。

Redux Reselect没有从api获取数据。
EN

Stack Overflow用户
提问于 2020-10-02 06:09:35
回答 1查看 122关注 0票数 0

我使用了Redux并重新选择,但是我无法从服务器上通过connect函数获取数据。但是如果我使用useSelectoruseEffect挂钩。它将正确工作,并成功地获取数据。但是我需要使用connect函数而不是useSelector。我在https://codesandbox.io中做过项目,源代码在下面的链接中。

源代码链接

样本代码在这里。非常感谢

代码语言:javascript
复制
import { createSlice } from "@reduxjs/toolkit";

import api from "./api";
const initialUser = localStorage.getItem("user")
  ? JSON.parse(localStorage.getItem("user"))
  : null;

// Slice
const slice = createSlice({
  name: "user",
  initialState: {
    user: initialUser,
    users: [],
    isLoading: false,
    error: false
  },
  reducers: {
    startLoading: (state) => {
      state.isLoading = false;
    },
    hasError: (state, action) => {
      state.error = action.payload;
      state.isLoading = false;
    },
    loginSuccess: (state, action) => {
      state.user = action.payload;
      localStorage.setItem("user", JSON.stringify(action.payload));
    },
    logoutSuccess: (state, action) => {
      state.user = null;
      localStorage.removeItem("user");
    },
    usersSuccess: (state, action) => {
      state.users = action.payload;
      state.isLoading = true;
    },
    getUsers: (state, action) => {
      state.users = action.payload;
    }
  }
});
export default slice.reducer;
// Actions
const {
  loginSuccess,
  logoutSuccess,
  usersSuccess,
  startLoading,
  hasError
} = slice.actions;

export const fetchUsers = () => async (dispatch) => {
  dispatch(startLoading());
  try {
    await api
      .get("/users")
      .then((response) => dispatch(usersSuccess(response.data)));
  } catch (e) {
    dispatch(hasError(e.message));
  }
};
export const login = ({ username, password }) => async (dispatch) => {
  try {
    // const res = await api.post('/api/auth/login/', { username, password })
    dispatch(loginSuccess({ username }));
  } catch (e) {
    return console.error(e.message);
  }
};
export const logout = () => async (dispatch) => {
  try {
    // const res = await api.post('/api/auth/logout/')
    return dispatch(logoutSuccess());
  } catch (e) {
    return console.error(e.message);
  }
};

export const selectUsers = (state) => state.user.users;
// App.js
const App = (props) => {
  console.log("users", props.users)
  return <div>sample</div>
}
const mapStateToProps = (state) => {
  return { users: selectUsers(state) };
};
export default connect(mapStateToProps)(App);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-02 19:11:43

看看redux -api中间件,它提供了一种在redux工作流中集成数据获取的更好的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64166873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档