javascript - 映射时为数组中的特定项目输入文本字段?
问题描述
我试图映射一个数组并尝试根据按钮单击更新特定项目。
<div className="read-data">
{readData.length >= 1 ? readData.map((res)=>(
<div>
<h2>{res.data.message}</h2>
<button onClick={()=>{
(setUpdateBox(true))
}}>
Update
</button>
{updateBox ? (
<div>
<form>
I<input type="text" name="textarea" placeholder="Update message"/>
</form>
</div>
):null}
<button onClick={()=>{
deleteMessage(res)}}> Delete</button>
</div>
)):null}
</div>
它为数组中的每个项目打开文本区域。但我想为单击相应按钮的唯一项目输入文本框。请帮助如何做到这一点。
解决方案
你可以做这样的事情。不确定您是否要使用状态或道具或两者兼而有之。
在数组中的每个对象上都有一个 updateBox 属性,并在真假之间切换。
当用户在输入框中输入内容时,您可能应该添加另一个函数来更新消息属性?
function App(){
function setUpdateBox(id){
const copyState = [...readData];
const thisItem = copyState.find(x => x.id == id);
thisItem.updateBox = !thisItem.updateBox;
setData(copyState);
}
function deleteMessage(id){
const copyState = [...readData].filter(x => x.id != id);
setData(copyState);
}
const initData = [
{id: 1, updateBox: true, data: {message: "hello"}},
{id: 2, updateBox: true, data: {message: "world"}},
]
const [readData, setData] = React.useState(initData);
return (
<div className="read-data">
{readData.length >= 1 ? readData.map((res)=>(
<div>
<h2>{res.data.message}</h2>
<button onClick={()=>setUpdateBox(res.id)}>
Update
</button>
{res.updateBox ? (
<div>
<form>
<input type="text" name="textarea" placeholder="Update message"/>
</form>
</div>
):null}
<button onClick={()=>deleteMessage(res.id)}> Delete</button>
</div>
)):null}
</div>
);
}
ReactDOM.render(<App/>, document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>
推荐阅读
- swift - Xcode 文件未在 Git Pull 上更新
- python - 迭代列表时,“方法”对象不可迭代
- java - QtJambi5+ 构建过程
- html - 引导卡位于另一个部分
- android - Android Google Play Billing Library v2/v3:如何阻止有人恶意阻止确认并因此获得退款?
- java - spinner.setSelection 不调用 setOnItemSelectedListener 函数
- html - 我使用了内联但我的列表仍然不是水平的,为什么?
- css - 无法使用 Parcel 和 postcss-custom-properties 设置 CSS 变量
- ghostscript - Ghostscript scipt 不再工作:pdfwite 需要一个输出文件
- debian - apt安装包忽略版本