反应本机删除功能无法正常工作

时间:2019-12-10 22:34:56

标签: javascript reactjs react-native logic

预期的功能是它只会删除被点击的一个目标,但由于某种奇怪的原因,它决定onPress删除列出的所有目标。

我正在遵循本教程https://www.youtube.com/watch?v=qSRrxpdMpVc,并且停留在2:44:45左右。如果其他任何人都完成了本教程,或者可以看到我的问题,将不胜感激。 :)

程序

import React, { useState } from "react";
import {
  StyleSheet,
  Text,
  View,
  Button,
  TextInput,
  ScrollView,
  FlatList
} from "react-native";

import GoalItem from "./components/GoalItem";
import GoalInput from "./components/GoalInput";

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

  const addGoalHandler = goalTitle => {
    setCourseGoals(currentGoals => [
      ...currentGoals,
      { key: Math.random().toString(), value: goalTitle }
    ]);
  };

  const removeGoalHander = goalId => {
    setCourseGoals(currentGoals => {
      return currentGoals.filter((goal) => goal.id !== goalId);
    });
  };

  return (
    <View style={styles.screen}>
      <GoalInput onAddGoal={addGoalHandler} />
      <FlatList
        keyExtractor={(item, index) => item.id}
        data={courseGoals}
        renderItem={itemData => (
          <GoalItem
            id={itemData.item.id}
            onDelete={removeGoalHander}
            title={itemData.item.value}
          />
        )}
      ></FlatList>
    </View>
  );
}

const styles = StyleSheet.create({
  screen: {
    padding: 80
  }
});

功能

import React from "react";
import { View, Text, StyleSheet, TouchableOpacity } from "react-native";

const GoalItem = props => {
  return (
    <TouchableOpacity onPress={props.onDelete.bind(this, props.id)}>
      <View style={styles.listItem}>
        <Text>{props.title}</Text>
      </View>
    </TouchableOpacity>
  );
};

const styles = StyleSheet.create({
  listItem: {
    padding: 10,
    backgroundColor: "lightgrey",
    borderColor: "grey",
    borderRadius: 5,
    borderWidth: 1,
    marginVertical: 10
  }
});

export default GoalItem;

1 个答案:

答案 0 :(得分:0)

更新状态时,您必须传递新数组,以便组件可以检测到更改并更新视图

const removeGoalHander = goalId => {
    setCourseGoals(currentGoals => {
      const newGoals = currentGoals.filter((goal) => goal.id !== goalId);
      return [...newGoals];
    });
  };
相关问题