reactjs - Redux 调度未触发获取 API
问题描述
嗨,我是使用 redux 的新手,我真的不明白为什么 FetchUsers() 在调度中不起作用,而我在 App.js 中获取的用户总是一个空数组。我应该使用 useDispatch() 吗?还是添加另一个中间件?
减速器
import {
FETCH_USERS,
FETCH_USERS_SUCCESS,
FETCH_USERS_FAILURE,
} from "../actions/types";
const initialValues = {
loading: false,
users: [],
error: "",
};
const usersreducer = (state = initialValues, action) => {
switch (action.type) {
case FETCH_USERS:
return { ...state, loading: true };
case FETCH_USERS_SUCCESS:
return { ...state, loading: false, users: action.payload };
case FETCH_USERS_FAILURE:
return { ...state, loading: false, error: action.payload };
default:
return state;
}
};
行动:
import { FETCH_USERS, FETCH_USERS_FAILURE, FETCH_USERS_SUCCESS } from "./types";
const fetchUsersRequest = () => {
return {
type: FETCH_USERS,
};
};
const fetchUsersFailure = (error) => {
return {
type: FETCH_USERS_FAILURE,
payload: error,
};
};
const fetchUsersSuccess = (users) => {
return {
type: FETCH_USERS_SUCCESS,
payload: users,
};
};
export const FetchUsers = () => {
return (dispatch) => {
dispatch(fetchUsersRequest());
fetch("https://jsonplaceholder.typicode.com/users")
.then((res) => {
const users = res.data;
dispatch(fetchUsersSuccess(users));
})
.then((err) => {
const error = "error";
dispatch(fetchUsersFailure(error));
});
};
};
指数:
import { createStore, applyMiddleware } from "redux";
import { Provider } from "react-redux";
import thunk from "redux-thunk";
import rootReducer from "./reducers";
const store = createStore(rootReducer, applyMiddleware(thunk));
ReactDOM.render(
<Provider store={store}>
<React.StrictMode>
<App />
</React.StrictMode>
</Provider>,
document.getElementById("root")
);
应用程序.js:
import { FetchUsers } from "./actions/actions";
import { useSelector, useDispatch } from "react-redux";
const App = () => {
const users = useSelector((state) => state.users);
useEffect(() => {
FetchUsers();
console.log(users.users);
}, []);
..................................................... ..................................................... ……
解决方案
简单地调用一个 thunk 不会导致任何事情发生;它只会返回另一个函数并且什么都不做。您需要以与发送正常操作相同的方式发送它。调度 thunk 将实际运行它,并且还允许它访问您的商店,以便您可以调度其他操作并访问商店的当前状态(如果您愿意)。FetchUsers()
真的只是一个常规功能;它本身无法访问您的商店。调度它为它提供了访问权限。
import { FetchUsers } from "./actions/actions";
import { useSelector, useDispatch } from "react-redux";
const App = () => {
const users = useSelector((state) => state.users);
const dispatch = useDispatch();
useEffect(() => {
dispatch(FetchUsers());
console.log(users.users);
}, []);
有关更多信息和示例,请参阅redux-thunk 文档。
推荐阅读
- python - 根据条件向多索引数据框添加新列
- c# - Xamarin 表单、DataTemplate 与自定义渲染器
- spring-boot - 如何将布尔数据库值映射到 Java 枚举
- php - 这个功能是安全的还是更安全,如果是的话如何
- python-3.x - 获取 N 项的所有组合
- .net-core - .net 核心中的 HttpClientHandler 不包含客户端证书
- python - itertools 产品功能列表中的两个元素
- cocoa - NS 定时器更新文本字段
- c# - 过滤 ICollectionView 以根据搜索词的存在时间对字符串进行排序
- java - 我想创建用户和角色实体类,但 @Column 注释要求数据源?