React.js 是一个用于构建用户界面的 JavaScript 库。上下文(Context)是 React 提供的一种在组件树中共享数据的方式,而不需要手动通过 props 逐层传递。Reducer 是一种用于管理应用状态的函数,通常与 Redux 或 React 的 useReducer
钩子一起使用。
Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 node.js。
createContext
和 useContext
钩子来创建和使用上下文。useReducer
钩子一起使用。以下是一个使用 React 的 useContext
和 useReducer
钩子,结合 Axios 进行数据请求的示例:
import React, { createContext, useContext, useReducer, useEffect } from 'react';
import axios from 'axios';
// 创建上下文
const DataContext = createContext();
// 初始状态
const initialState = {
data: [],
loading: true,
error: null,
};
// Reducer 函数
const dataReducer = (state, action) => {
switch (action.type) {
case 'FETCH_SUCCESS':
return { ...state, data: action.payload, loading: false };
case 'FETCH_ERROR':
return { ...state, error: action.payload, loading: false };
default:
return state;
}
};
// 数据提供者组件
const DataProvider = ({ children }) => {
const [state, dispatch] = useReducer(dataReducer, initialState);
useEffect(() => {
axios.get('https://api.example.com/data')
.then(response => {
dispatch({ type: 'FETCH_SUCCESS', payload: response.data });
})
.catch(error => {
dispatch({ type: 'FETCH_ERROR', payload: error.message });
});
}, []);
return (
<DataContext.Provider value={state}>
{children}
</DataContext.Provider>
);
};
// 使用上下文和 reducer 的组件
const DataDisplay = () => {
const { data, loading, error } = useContext(DataContext);
if (loading) return <div>Loading...</div>;
if (error) return <div>Error: {error}</div>;
return (
<ul>
{data.map(item => (
<li key={item.id}>{item.name}</li>
))}
</ul>
);
};
// 应用入口
const App = () => {
return (
<DataProvider>
<DataDisplay />
</DataProvider>
);
};
export default App;
useContext
钩子,或者上下文的值没有发生变化。useContext
钩子,并且上下文的值确实发生了变化。combineReducers
进行组合。希望这些信息对你有所帮助!如果有更多具体问题,请随时提问。
领取专属 10元无门槛券
手把手带您无忧上云