如何使用TextInput更新已创建文本?点击更新按钮界面不生效怎么办
问题根源
你当前的代码存在3个核心问题导致更新不生效:
- 长按唤起编辑弹窗时,只保存了待修改的任务标题,没有保存对应任务的ID,后续找不到要修改的目标条目
updateTodo现有逻辑是新增一条待办,不是修改原有待办,所以原条目不会变化,反而会多出来一条重复ID的新条目- 点击更新按钮调用
updateTodo时传入的参数无意义,函数本身没有设计接收参数的逻辑
修正方案
- 首先修改长按事件,保存待修改任务的ID:
找到待办项文本外层TouchableOpacity的onLongPress逻辑,修改为:
onLongPress={() => { setUpdateModal(true); setUpdateTaskTitle(item.name); setUpdateTaskId(item.key); // 新增这行,保存待修改任务的ID }}
- 重写
updateTodo函数,实现修改指定条目的逻辑:
const updateTodo = () => { // 遍历待办数组,匹配到对应ID的条目时更新名称,其他条目保持原有属性不变 const updatedTodos = todos.map(todo => { if (todo.key === updateTaskId) { return { ...todo, name: updateTaskTitle } } return todo }) setTodos(updatedTodos); };
- 修正更新按钮的点击逻辑,删掉无意义的传参:
找到弹窗内更新按钮的onPress逻辑,修改为:
onPress={() => { setUpdateModal(false); updateTodo(); // 删掉多余参数,函数可直接从state获取需要的ID和新标题 setUpdateTaskTitle(''); setUpdateTaskId(''); // 新增这行,清空保存的待修改ID,避免影响后续编辑 console.log(updateTaskTitle); }}
内容的提问来源于stack exchange,提问作者Lmao12233
相关产品推荐
相关产品推荐

