javascript - 使用 axios 将数据提取到上下文中
问题描述
我正在尝试使用从 api 获得的数据创建一个 reactContext。当我尝试在我的组件“家庭”产品中显示数据时,它似乎未定义。这是在上下文中存储 api 数据的正确方法吗?谢谢!pd:我将 de base api url 更改为另一个以进行测试
上下文.js
import {
createContext,
useState,
useEffect,
useReducer,
useContext,
} from "react";
import axios from "axios";
import { cartReducer } from "./Reducers";
const Cart = createContext();
const Context = ({ children }) => {
//estado productos
const [products, setProducts] = useState([]);
//funcion traer productos
const fetchProducts = () => {
axios.get("https://aves.ninjas.cl/api/birds").then((response) => {
//almacenar productos en el estado
setProducts(response.data);
});
};
//efecto para traer productos de api
useEffect(() => {
fetchProducts();
}, []);
//cart reducer
const [state, dispatch] = useReducer(cartReducer, {
products: products,
cart: [],
});
//console.log(products); // <--- the products are inside de variable
//console.log(state); // <-- state are {products: Array(0), cart: Array(0)}
return <Cart.Provider value={{ state, dispatch }}>{children}</Cart.Provider>;
};
export const CartState = () => {
return useContext(Cart);
};
export default Context;
减速器.js
export const cartReducer = (state, action) => {
switch (action.type) {
default:
return state;
}
};
主页组件 (Home.js)
import { CartState } from "../../context/Context";
import "./Home.css";
const Home = () => {
const { state } = CartState();
console.log(state);
return <div>home page</div>;
};
export default Home;
应用程序.js
import Header from "./components/Header/Header";
import { BrowserRouter, Route } from "react-router-dom";
import Cart from "./components/Cart/Cart";
import Home from "./components/Home/Home";
import "./App.css";
function App() {
return (
<BrowserRouter>
<Header />
<>
<Route path="/" exact>
<Home />
</Route>
<Route path="/cart" exact>
<Cart />
</Route>
</>
</BrowserRouter>
);
}
export default App;
index.js
import React from "react";
import ReactDOM from "react-dom";
import "./index.css";
import App from "./App";
import "bootstrap/dist/css/bootstrap.min.css";
import Context from "./context/Context";
ReactDOM.render(
<React.StrictMode>
<Context>
<App />
</Context>
</React.StrictMode>,
document.getElementById("root")
);
解决方案
推荐阅读
- flutter - 如何仅操作 ListView.builder 的一个元素
- socket.io - 如何让 socket.io 与 deno 一起工作?
- python - Python线程锁共享对象无法正常工作
- javascript - 不显示动态 div 中的图像
- python - python游标只返回第一列不为空的那些行
- linux - 如何更改某些文件的扩展名?
- ios - 使用 Accelerate 框架的对称带矩阵的特征值
- php - 从动态 php 文件生成 PDF
- microsoft-graph-api - 不支持endsWith过滤器?
- vba - SAP GUI 脚本 VBA - 按钮按下被忽略