reactjs - 有谁知道为什么这个 deleteItem 函数在Press 上不起作用?
问题描述
我不能让它deleteItem
工作。一切看起来都很好,并且它记录了它正在接收道具,但点击后该项目没有被删除。任何帮助将不胜感激!
应用程序.js:
const App = () => {
const [item, setItems] = useState([
{
id: uuidv4(),
name: ''
},
]);
const addItems = (text) => {
if (!text) {
Alert.alert('Error', "How can I add something thats not there??", { text: 'ok' })
} else {
setItems(prevItems => {
return [{ id: uuidv4(), name: text }, ...prevItems]
})
}
}
const deleteItem = (id) => {
setItems((prev) => {
return prev.filter(item => item.id !== id)
})
console.log('working');
}
return (
<View style={styles.container}>
<ImageBackground source={background} style={styles.image}>
<Header
title="Gotta get this done!" />
<AddItem
addItem={addItems}
/>
<FlatList
data={item}
renderItem={({ item }) => {
if (item.name === null) {
return (
<Prompt />
)
} else {
return (
<ListItem item={item.name} deleteItem={deleteItem} />
)
}
}}
/>
</ImageBackground>
</View>
)
};
这是我的ListItem
组件。我传入deleteItem
道具并在下面调用它:
import React from 'react';
import { View, Text, StyleSheet, TouchableOpacity } from 'react-native';
// import Icon from 'react-native-vector-icons/dist/FontAwesome';
const ListItem = ({ item, deleteItem }) => {
return (
<View style={styles.listItem}>
<View style={styles.listItemView}>
<Text style={styles.itemText}>{item}</Text>
</View>
<View style={styles.button}>
<TouchableOpacity onPress={() => deleteItem(item.id)}>
<Text>Remove</Text>
</TouchableOpacity>
</View>
</View>
)
};
解决方案
<ListItem item={item.name} deleteItem={deleteItem} />
您将name
属性传递为item
. 您可能打算传递项目本身:
<ListItem item={item} deleteItem={deleteItem} />
请记住然后访问组件.name
中的属性ListItem
:
const ListItem = ({ item, deleteItem }) => {
return (
<View style={styles.listItem}>
<View style={styles.listItemView}>
<Text style={styles.itemText}>{item.name}</Text>
{/* ^^^^ */}
</View>
<View style={styles.button}>
<TouchableOpacity onPress={() => deleteItem(item.id)}>
<Text>Remove</Text>
</TouchableOpacity>
</View>
</View>
)
};
编辑:正如评论中提到的,这是一个带有 PropTypes 的组件,它将在控制台中为您的问题中的版本打印一个错误:
import PropTypes from 'prop-types'
const ListItem = // ...
ListItem.propTypes = {
item: PropTypes.shape({
name: PropTypes.string
id: PropTypes.string
}).isRequired,
deleteItem: PropTypes.func.isRequired
}
推荐阅读
- javascript - TypeError:this.props.onIncrement 不是函数
- c# - 如何使用 Azure B2C 实施安全调查问卷?
- android - 如何在 MpAndroidChart 中显示两位小数的百分比?
- reactjs - 使用 react-select 但占位符未显示
- mongodb - Mongoose - 用基于外部参数的布尔值替换引用数组
- python-3.x - 读取所有 CSV,在这些 CSV 上运行一些代码,然后编写新的 CSV
- java - @JsonPoperty 无法获取嵌套值
- python - 如何将单独列表的所有项目写入单个文件
- python - 试图理解线程
- arrays - WEBGL 1.0 着色器:如果我不能使用变量来计算索引,那么使用数组有什么意义?