我有一個物件陣列,我在該陣列上做了一個映射,現在我想更改特定的物件值。我onChange在map()函式內部使用了方法。它無法正常作業,有人可以幫助我解決這個問題。
謝謝
localPreRoutingCall &&
localPreRoutingCall.map((item, index) => (
<>
<div className="pre-route-title">{item && item.field_title}</div>
<textarea
placeholder="Enter something"
className="pre-route-textarea"
value={item && item.value}
onChange={(e) => {
e.persist();
changeObjectValue(e.target.value, item);
}}
/>
<div className="pre-route-description">
{item && item.description}
</div>
</>
))
我正在更新物件值的函式
const changeObjectValue = (value, item) => {
console.log("@@ array", value);
let localArray = localPreRoutingCall;
var index = _.findIndex(localArray, { id: item.id });
localArray.splice(index, 1, { ...item, value: value });
setLocalPreRoutingCall(localArray);
};
uj5u.com熱心網友回復:
就像評論中所說的那樣,你必須將一個keyprop傳遞給你正在渲染的內容,以便 React 知道發生了什么變化。
e.persist當您立即傳遞值時,我看不到您使用該函式的理由。
import { Fragment } from "react";
localPreRoutingCall?.map((item, i) => (
<Fragment key={item.id}>
<div className="pre-route-title">{item.field_title}</div>
<textarea
placeholder="Enter something"
className="pre-route-textarea"
value={item.value}
onChange={(e) => changeObjectValue(e.target.value, i)}
/>
<div className="pre-route-description">
{item.description}
</div>
</Fragment>
))
localPreRoutingCall在更改其值之前,您也沒有克隆狀態陣列。
React 不知道發生了什么變化的另一個原因。
const changeObjectValue = (value, i) => {
const localArray = [...localPreRoutingCall];
localArray[i].value = value;
setLocalPreRoutingCall(localArray);
};
uj5u.com熱心網友回復:
我可以看到的一個明顯問題是您沒有提供映射的組件鍵。
<> 不能在 map 中使用,因為它不能傳遞一個鍵,所以這將是一個改進
<React.Fragment key={item.id}>
uj5u.com熱心網友回復:
而不是使用
localArray.splice(index, 1, { ...item, value: value });
用
localArray[index].value = 值
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/318242.html
標籤:javascript 反应 ecmascript-6 洛达什
上一篇:如何在我的模型中輸入正確的ID?
