Javascript 数据未使用React Hook useffect()更新
我有一个小型web应用程序,它使用axios从API获取一些订单。我的问题是新订单只在页面刷新时出现,不会自动更新 这是我的useEffect挂钩:Javascript 数据未使用React Hook useffect()更新,javascript,reactjs,axios,Javascript,Reactjs,Axios,我有一个小型web应用程序,它使用axios从API获取一些订单。我的问题是新订单只在页面刷新时出现,不会自动更新 这是我的useEffect挂钩: useEffect(() => { setLoading(true); apiClient .getEvents() .then((res) => { console.log(res); setOrders(res.data); setLoading
useEffect(() => {
setLoading(true);
apiClient
.getEvents()
.then((res) => {
console.log(res);
setOrders(res.data);
setLoading(false);
})
.catch((err) => {
console.log(err);
});
}, []);
这里是我使用axios的地方:
import axios from "axios";
const username = "user";
const password = "pass";
const token = Buffer.from(`${username}:${password}`, "utf8").toString("base64");
const apiClient = axios.create({
baseURL: "API URL",
withCredentials: false,
headers: {
Accept: "application/json",
"Content-Type": "application/json",
Authorization: `Basic ${token}`,
},
});
export default {
getEvents() {
return apiClient.get("/orders");
},
getEvent(order_id) {
return apiClient.get("/orders/" + order_id);
},
};
你的问题是Useffect挂钩本身
useEffect(() => {
setLoading(true);
apiClient
.getEvents()
.then((res) => {
console.log(res);
setOrders(res.data);
setLoading(false);
})
.catch((err) => {
console.log(err);
});
}, []);
在这里传递一个空数组作为第二个参数:},[])代码>当您将空数组作为第二个参数传递给useffect
时,它将只在第一次装载时运行,然后再也不会运行。
可以在此参数中传递不同的变量。在这种情况下,当这些变量的值发生变化时,useffect
将运行。因此,例如,您可以使用一个“刷新”按钮来更改名为Refresh
的状态,然后将其作为第二个参数传递给useffect
const [refresh, setRefresh] = useState(false);
useEffect(() => {
if(!refresh) return;
setLoading(true);
apiClient
.getEvents()
.then((res) => {
console.log(res);
setOrders(res.data);
setLoading(false);
setRefresh(false);
})
.catch((err) => {
console.log(err);
});
}, [refresh]);
这只是一个简单的例子,当然可以做得更好
还有一个提示:您可以省略useffect
的第二个参数,即依赖项数组,这将使它在组件的每次更新中都运行不要这样做。在大多数情况下,您将进入一个无限循环,因为大多数情况下,您将更新状态并导致组件在useffect
内重新加载-在您的情况下,使用setload()
就足够了。您可以使用useffect
共享组件的代码示例吗?如果我们能看到组件是如何声明“数据”和使用它的,那就更好了。这是我的完整组件代码:console.log(res)
log您希望什么?页面是否卡在“加载”位置,或者设置加载(false)代码>停止?您能更具体地说明哪些数据没有更新吗?数据是在网站的初始加载时加载的,但每当我下新订单时,我都需要刷新页面以使新订单出现。您好,关于一行的观察,您仅在then块中设置加载(false),我建议您添加finally块和设置加载(false)里面。在加载错误的情况下,仍应为真