藍山帝景
2023-11-11 21:24:45
我有一個有兩列的表格。左列是右列的建議值。我目前提供了來自單獨 API 調用的兩個值。這是有效的。這是當前的代碼:const dbContact = useDbContact(contact.Group); 這將設置當前值的值,contact.Group從傳遞到 API 調用的建議值。然后我稍后用它來調用表單輸入值:<Form.Row> <Form.Group as={Col} controlId="currentSecName" className="mb-2"> <Form.Control type="input" name="1secname" value={contact.SecretaryName} readOnly /> </Form.Group> <Form.Group as={Col} controlId="dbSecName" className="mb-2"> <Form.Control type="input" name="2secname" value={dbContact.SecretaryName} readOnly /> </Form.Group> <Button className="PrimaryButton" size="sm"> Accept proposed </Button> <div class="divider" /></Form.Row>現在我已經完成了所有這些工作,我的下一步是讓“接受”按鈕根據建議更新當前值。我的代碼是這樣的:const dbContact = useDbContact(contact.Group);const [dbSecName, setDbSecName] = useState(dbContact.SecretaryName)和<Form.Control type="input" name="2secname" value={dbSecName} readOnly /> 這將允許我更改狀態值“onClick”當我這樣做時,我得到'dbContact.SecretaryName is undefined'?,F在,我假設考慮到我在測試期間直接請求表單中的值,我很幸運在請求之前已填充該值,因此 API 調用可能存在問題。這是 API 調用: async function getData(group) { try { const apiGroups = await API.graphql(graphqlOperation(queries.getNtig, { PK: "Group#" + group, SK: "Officers#2" })); let listItem = await apiGroups.data.getNTIG; let PK = await apiGroups.data.getNTIG.PK.split("#")[1]; let secJson = await JSON.parse(apiGroups.data.getNTIG.Secretary); let id = 1; let receivedItems = { Id: id, PK: PK, SecretaryName: secJson.Name, }; setList(receivedItems); } catch (err) {} } useEffect(() => { if (!isAuthenticated) { return; } getData(group); }, [isAuthenticated, group]); console.log(list); return list;}我希望有人可以幫助我糾正邏輯以便設置狀態值有效,或者更改表單輸入值的替代方法。
1 回答

紅糖糍粑
TA貢獻1815條經驗 獲得超6個贊
我不確定這是否是正確的方法,但它有效,并且還解決了在重新渲染元素時、當狀態值因 API 調用而更改時更改不受控制的元素的額外問題。
這是我從 API 調用獲取值并最初設置狀態的地方:
const dbContact = useDbContact(contact.Group);
const [dbSecName, setDbSecName] = useState("");
然后,我使用 useEffect 和異步函數來等待 API 調用的值,并使用該值設置狀態:
useEffect(() => {
async function getDbContact() {
let secName = await dbContact.SecretaryName;
setDbSecName(secName);
}
getDbContact();
}, [dbContact.SecretaryName]);
然后我可以使用表單輸入中的值:
<Form.Control type="input" name="2secname" value={dbSecName || ""} readOnly />
顯然,我需要處理表單輸入中的狀態更改,但這現在應該很簡單。
我不是開發人員,所以如果有更好的答案出現,我會很高興看到它?,F在看來,我自己的問題已經解決了。
添加回答
舉報
0/150
提交
取消