Я пытаюсь привязать ввод к состоянию. При этом я застрял там, где входное значение фиксируется в функции onChange и обновляется до состояния, однако объект JSON ({JSON.stringify(data.MetricsData)}
), который находится в пользовательском интерфейсе, не обновляется.
Выходной результат должен JSON.stringify(data.MetricsData)
быть обновлен последним значением на входе.
Ниже приведен упрощенный код:
let obj = [];
function Metrics() {
obj["MetricsData"] = MetricsDataObj()
const [data, setData] = useState(obj);
function onChange(event){
let value = event.target.value;
data.MetricsData[0].year1 = value;
setData(() => {
console.info(data)
return data;
});
}
return (
<div>
<input type = "number" placeholder = "0.00" min = "0.00" step = "0.01" onChange = {(e) => onChange(e)} />
<br/><br/>
{JSON.stringify(data.MetricsData)}
</div>
);
}
function MetricsDataObj(){
return [
{ id: 1, name: 'Month 1', year1: '' }
];
}
export default Metrics;
Вам нужно сделать копию из state
перед обновлением его значения. Кроме того, способ, который вы выбрали для обновления state
, неверен. Попробуй это:
import { useState } from "react";
let obj = [];
function Metrics() {
obj["MetricsData"] = MetricsDataObj()
const [data, setData] = useState(obj);
function onChange(event){
let value = event.target.value;
const copy = {...data};
copy.MetricsData[0].year1 = value;
setData(copy);
}
return (
<div>
<input type = "number" placeholder = "0.00" min = "0.00" step = "0.01" onChange = {(e) => onChange(e)} />
<br/><br/>
{JSON.stringify(data.MetricsData)}
</div>
);
}
function MetricsDataObj(){
return [
{ id: 1, name: 'Month 1', year1: '' }
];
}
export default function App() {
return (
<Metrics/>
);
}
Попробуйте передать значение в <input />, чтобы сделать его управляемым,
<input value = {data.MetricsData[0]} />
что-то вроде этого