Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 数据未使用React Hook useffect()更新_Javascript_Reactjs_Axios - Fatal编程技术网

Javascript 数据未使用React Hook useffect()更新

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

我有一个小型web应用程序,它使用axios从API获取一些订单。我的问题是新订单只在页面刷新时出现,不会自动更新

这是我的useEffect挂钩:

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)里面。在加载错误的情况下,仍应为真