4 回答

TA貢獻2021條經驗 獲得超8個贊
正如其他人所說,問題是您需要onChange并value指向狀態中的相同值/變量。
更進一步,我將清除狀態中的所有這些變量并僅使用一種方法來更改屬性(例如,如果您有很多字段并且代碼足夠長)
const changeField = (name, value) => {
let newCountryInfo = [...countryInfo];
newCountryInfo[0].data.Country[0][name] = value;
setCountry(newCountryInfo);
};
并且在每個TextField你添加的東西取決于領域如下
onChange={event => {
changeField("name", event.target.value);
}}
檢查此代碼和框鏈接

TA貢獻1797條經驗 獲得超6個贊
問題在這里:
value={item.data.Country[0].name}
您在屬性中設置的任何內容都value將保留在其中。因此,不是在此處傳遞您的 API 響應,而是在其中傳遞一個狀態值,并根據輸入值的變化更新該狀態(2 種方式數據綁定)。它將解決問題。
您必須做出的改變:
const [countryName, setCountryName] = useState("");
onChange={event => {
setCountryName(event.target.value); // This will update the state
}}
value={countryName} // updated state value is used here

TA貢獻2036條經驗 獲得超8個贊
使用 State 屬性作為值
const [國家名稱, setCountryName] = useState("");
<TextField
className={classes.field}
disabled={disabledField}
label="Name"
value={countryName}
onChange={event => {
setCountryName(event.target.value);
}}
variant="outlined"
InputLabelProps={{
shrink: true
}}
/>
在useState("")內部,定義初始值或預定義值。

TA貢獻1111條經驗 獲得超0個贊
我不是 React 專家,但似乎 React 組件正在覆蓋所有正在輸入的更改。您可以在開發控制臺上看到它,只需刪除 value="brazil" 并嘗試輸入內容,value="brazil" 將彈出回到輸入標簽。我可以建議用占位符替換值。這樣,用戶仍會看到舊值,并且能夠鍵入新值。
添加回答
舉報