【问题标题】:How can I remove the element that is clicked, instead of all items being deleted except the item clicked?如何删除单击的元素,而不是删除除单击的项目之外的所有项目?
【发布时间】:2020-03-02 19:51:57
【问题描述】:

这是来自 react native 教程 -> https://www.youtube.com/watch?v=qSRrxpdMpVc

该应用程序用于记录您的“课程目标”。它基本上只是一个 ToDo 列表。您可以添加和删除目标。

为了解决这个问题,我想自己尝试执行“删除”代码。我想知道如何使我的方法起作用:

export default function App() {
      const [courseGoals, setCourseGoals] = useState([]);

      function addGoalHandler(goalTitle) {
        setCourseGoals([goalTitle, ...courseGoals]);
      }

      function removeGoalHandler(index) {
        console.log(index)
        setCourseGoals(courseGoals.splice(index, 1));
      }

      return (
        <View style={styles.screen}>

          <GoalInput onAddGoal={addGoalHandler}/>

          <ScrollView>
            {courseGoals.map((goal, index) => <GoalItem onDelete={() => removeGoalHandler(index)} title={goal} key={index}/>)}
          </ScrollView>


        </View>
      );
    }

我认为在第 10 行会发生的是 courseGoals 数组将设置为 courseGoals 减去拼接元素。相反,我发现 splice 实际上返回了已删除的项目。我怎样才能解决这个问题?有没有办法让courseGoals.splice()返回没有拼接元素的数组?

【问题讨论】:

  • splice 修改使用它的数组。先做一个副本,再拼接副本,再设置状态为副本。

标签: javascript react-native babeljs


【解决方案1】:

您可以使用slice

function removeGoalHandler(index) {
  console.log(index);
  setCourseGoals([...courseGoals.slice(0, index), ...courseGoals.slice(index + 1)]);
}

splice:

function removeGoalHandler(index) {
  console.log(index);
  const courseGoalsCopy = [...courseGoals];
  courseGoalsCopy.splice(index, 1);
  setCourseGoals(courseGoalsCopy);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 2015-11-07
    • 2013-10-09
    • 2016-04-23
    相关资源
    最近更新 更多