30秒到達戰場
2023-03-18 16:37:01
我有一個帶有 3 個選項和 3 個文本輸入的選擇輸入。ideia 是:我選擇所需的屬性(例如:A),并且只有此輸入對用戶可用,其他的將被禁用。然后我單擊禁用輸入下方的“計算”按鈕,根據我插入的屬性顯示該輸入的計算值(在本例中,只是為了簡化,此值始終為 123)。import React, { useState } from "react";import "./styles.css";export default function App() { const [models, setModels] = useState([ { name: "A", value: undefined }, { name: "B", value: undefined }, { name: "C", value: undefined } ]); const onModelChange = (e) => { const { name, value } = e.target; let newModels = models; newModels[ newModels.findIndex((model) => model.name === name) ].value = parseInt(value, 10); setModels(newModels); }; const onCalculate = (modelName) => { let newModels = models; newModels[ newModels.findIndex((model) => model.name === modelName) ].value = 123; console.log(newModels); setModels(newModels); }; const [selectedOption, setSelectedOption] = useState("A"); const handleChange = (e) => { setSelectedOption(e.target.value); }; return ( <div className="App"> <select onChange={handleChange} value={selectedOption}> <option value="A">A</option> <option value="B">B</option> <option value="C">C</option> </select> <br /> {models.map((model) => ( <div key={model.name}> <input placeholder={model.name} name={model.name} label={model.name} width="100px" type="number" min="0" max="1000" value={model.value} onChange={onModelChange} disabled={selectedOption !== model.name} />我的問題是輸入中的值來自一個名為“模型”的狀態變量,在我單擊“計算”后,這個變量發生了變化,正如您在控制臺上看到的那樣,但該值未顯示在禁用的輸入中.有誰知道如何解決這一問題?codesandbox 鏈接:https://codesandbox.io/s/affectionate-ives-uytgy ?file=/src/App.js
1 回答

守著一只汪
TA貢獻1872條經驗 獲得超4個贊
問題
您正在改變狀態數組并更新它。React 不知道狀態是否已經改變,因為你傳遞的是對 setState 的舊引用。
解決方案
首先,獲取狀態數組的副本。
改變狀態數組的復制版本。
使用新的更新變異數組更新您的狀態。
const onModelChange = e => {
const { name, value } = e.target;
let newModels = [...models];
newModels[
newModels.findIndex(model => model.name === name)
].value = parseInt(value, 10);
setModels(newModels);
};
const onCalculate = modelName => {
let newModels = [...models];
newModels[
newModels.findIndex(model => model.name === modelName)
].value = 123;
setModels(newModels);
};
您可以在此示例中檢查類似的問題:- https://stackblitz.com/edit/react-osxmnr
添加回答
舉報
0/150
提交
取消