javascript - 使用一个元素打开可编辑的内联文本区域
问题描述
当我单击edit
打开textarea
所有元素的可编辑。如何设置它以使其仅在我单击的元素处打开。
此处演示:https ://stackblitz.com/edit/react-yoevt8
class App extends Component {
constructor() {
super();
this.state = {
todos: [],
showTextAreaEdit: false
};
}
componentDidMount() {
this.getTodos();
}
displayEdit = () => {
this.setState({
showTextAreaEdit: true
})
}
getTodos = () => {
axios({
url: 'https://jsonplaceholder.typicode.com/todos',
method: 'GET'
})
.then(res => {
this.setState({
todos: res.data
});
})
.catch(error => {
console.log(error);
});
};
render() {
return (
<ul>
{this.state.todos.map((todo, index) => {
return (<li key={todo.id}>
{this.state.showTextAreaEdit ?
<span>
<textarea>{todo.title}</textarea>
<button>Save</button>
</span>
:
<span>
{todo.title}
<button onClick={this.displayEdit}>Edit</button>
</span>
}
</li>)
})}
</ul>
);
}
}
解决方案
你维持的状态是不够的。然后,您必须维护每个列表项的状态。您可以在列表的每个项目中使用这样的键
{
id: 1,
title: '...'
isEditable: false
}
现在,当您单击编辑按钮时,仅制作该 item isEditable: true
,然后textarea
根据每个 itemsisEditable
键而不是中央showTextAreaEdit
键渲染。
推荐阅读
- javascript - 获取表单数据后如何在 Sails.js 中发送操作?
- matplotlib - 如何理解图上生成的 LSTM 性能?
- javascript - 防止默认滚动
- java - Spring Boot 安全性以允许除一个之外的所有端点
- webrtc - 在对等连接协商阶段,是否有还价?
- java - 使用 Array.getInt(Object array, int index) vs Array[]
- php - 如果已经使用另一个会话登录,则会中断登录流程
- python - 函数内部的循环不能像外部循环一样运行
- javascript - 为什么 JS 循环不是通过 preudo 代码返回所有结果?
- node.js - Node.js 路由正则表达式