Redux 是一个用于 JavaScript 应用的状态管理库,它可以帮助你管理应用的状态,使其更加可预测和可维护。以下是如何使用 Redux 从自己的 API 获取数据的基本步骤:
以下是一个简单的例子,展示如何使用 Redux Thunk 中间件从 API 获取数据:
npm install redux react-redux @reduxjs/toolkit axios
// store.js
import { configureStore } from '@reduxjs/toolkit';
import thunk from 'redux-thunk';
import rootReducer from './rootReducer';
const store = configureStore({
reducer: rootReducer,
middleware: [thunk],
});
export default store;
// dataSlice.js
import { createSlice, createAsyncThunk } from '@reduxjs/toolkit';
import axios from 'axios';
export const fetchData = createAsyncThunk('data/fetchData', async () => {
const response = await axios.get('/api/data');
return response.data;
});
const dataSlice = createSlice({
name: 'data',
initialState: { entities: [], loading: 'idle' },
reducers: {},
extraReducers: (builder) => {
builder
.addCase(fetchData.pending, (state) => {
state.loading = 'pending';
})
.addCase(fetchData.fulfilled, (state, action) => {
state.loading = 'fulfilled';
state.entities = action.payload;
})
.addCase(fetchData.rejected, (state) => {
state.loading = 'rejected';
});
},
});
export default dataSlice.reducer;
// rootReducer.js
import { combineReducers } from 'redux';
import dataReducer from './dataSlice';
const rootReducer = combineReducers({
data: dataReducer,
});
export default rootReducer;
// App.js
import React, { useEffect } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { fetchData } from './dataSlice';
function App() {
const dispatch = useDispatch();
const { entities, loading } = useSelector((state) => state.data);
useEffect(() => {
dispatch(fetchData());
}, [dispatch]);
if (loading === 'pending') {
return <div>Loading...</div>;
}
if (loading === 'rejected') {
return <div>Error fetching data</div>;
}
return (
<div>
{entities.map((item) => (
<div key={item.id}>{item.name}</div>
))}
</div>
);
}
export default App;
问题: 数据获取失败,控制台显示网络错误。
原因: 可能是 API 地址错误,或者服务器没有响应。
解决方法: 检查 API 地址是否正确,使用浏览器的开发者工具查看网络请求,确认服务器是否正常响应。
问题: 数据获取成功,但组件没有更新。
原因: 可能是 Redux 状态没有正确更新,或者组件没有正确连接到 Redux。
解决方法: 使用 Redux DevTools 检查状态是否更新,确保组件使用了 useSelector
正确连接到 Redux。
通过以上步骤,你可以使用 Redux 从自己的 API 获取数据,并管理应用的状态。
领取专属 10元无门槛券
手把手带您无忧上云