我正在使用useState钩子将下拉列表中的值设置为变量。在我的特殊情况下里面onDeviceIdChange,我设置setDeviceId到value它是由组件库我使用的是事件发出。value拥有我期望的正确值,但它不会deviceId立即更新。
我已经阅读了与此问题相关的各种帖子,最常见的解决方案似乎是将变量传递给第二个参数 useEffect
所以像这样
useEffect(() => {
fetchDeviceIds();
console.log("call back for device id selection", deviceId);
}, [deviceId]);
但这似乎只是fetchDeviceIds为我重复触发该函数,而从未真正调用更改处理程序。我已经尝试了一些变体,useEffect但无法在里面获得更新的值deviceId
下面是我的初始实现,没有放入deviceId第二个参数useEffect
import React, { useState, useEffect } from "react";
import axios from "axios";
import { Dropdown, Form, Input } from "semantic-ui-react";
const Example = props => {
const [deviceId, setDeviceId] = useState("");
const [hardware, setHardware] = useState([]);
const [error, setError] = useState("");
const [versionNum, setVersionNum] = useState("");
const [isLoading, setIsLoading] = useState(true);
async function fetchDeviceIds() {
const url = "/api/hardware";
try {
const response = await fetch(url, {
method: "GET"
});
if (!response.ok) {
setError(response.statusText);
}
const data = await response.json();
console.log(data);
setHardware(data.hardware);
} catch (error) {
console.log("error catch", error);
console.log("Handle networking errors", error.message);
}
}
const versionUrl = "/api/versionUrl";
const onDeviceIdChange = async (e, { value }) => {
console.log("device id value --> ", value);
setDeviceId(value);
console.log(deviceId); //this won't update immediately
if (!deviceId) {
handleClear();
return;
}
try {
console.log("calling versionUrl");
const response = fetch(versionUrl, {
method: "POST",
body: JSON.stringify({
deviceId: deviceId
}),
headers: {
"Content-Type": "application/json"
}
});
RISEBY
饮歌长啸
相关分类