【问题标题】:arr.splice() method deletes wrong item in react native projectarr.splice() 方法删除反应原生项目中的错误项目
【发布时间】:2021-10-07 20:15:55
【问题描述】:

我正在用 react-native 制作一个待办事项应用程序。我做了一个删除按下任务的功能,但是当我按下时,它会删除列表中的第一个项目,而不是我按下的那个。 这是我使用的代码:

 let id = 0;
  const [task, setTask] = useState("");
  const [taskList, setTaskList] = useState([
    { name: "Add your first task", id: id++ },
  ]);
  const handleTask = (e) => {
    e.preventDefault();
    setTaskList([...taskList, { name: task, id: id++ }]);
    setTask("");
  };
  function completeTask(index) {
    let itemsCopy = [...taskList];
    itemsCopy.splice(index, 1);
    setTaskList(itemsCopy);
  }
    {taskList.map((taskList, index) => {
              return (
                <View style={styles.wrapper}>
                  <View style={styles.text}>
                    <TouchableOpacity key={index} onPress={completeTask}>
                      <Text> {taskList.name} </Text>
                    </TouchableOpacity>
                  </View>
                </View>
              );
            })}

【问题讨论】:

  • 你能调试一下吗?按下时index的值是多少?

标签: javascript arrays reactjs react-native


【解决方案1】:

调用completeTask 并以错误的方式更新状态时,您没有传递索引。

onPress={() => completeTask(index)}

function completeTask(index) {
  setTaskList((preTasks) => preTasks.filter((item, i) => i !== index));
}

【讨论】:

  • 另外,不要在映射项目上使用index 作为key,使用独特的东西,例如一个ID
  • 没错,我们将key 放在View 正下方的map 中,而不是放在TouchableOpacity
猜你喜欢
  • 1970-01-01
  • 2018-12-29
  • 1970-01-01
  • 2021-01-26
  • 2018-03-27
  • 2020-05-28
  • 1970-01-01
  • 2022-06-16
  • 1970-01-01
相关资源
最近更新 更多