react-native - React Native Flatlist 仅更新最后一项
问题描述
当我尝试更新平面列表中的数据时,它不会更新所选项目,而只会更新插入的最后一个项目。
更新:
const updateUser = (item) => {
setModalVisible(false);
let jobRef = firebase.database().ref("user/" + userId + "/job/" + item.id);
jobRef
.update({ name: newName})
.then(res => console.log(res))
.catch(err => console.log(err));
};
keyExtractor 和 renderItem
const keyExtractor = (item, index) => index.toString();
const renderItem = ({ item }) => {
return (
<View>
<Modal visible={modalVisible}>
<View style={styles.modal}>
<TextInput
onChangeText={text => setNewName(text)} />
<TouchableOpacity
onPress={() => setModalVisible(false)} style={styles.button}>
<Text style={styles.buttonText}>
Cancel
</Text>
</TouchableOpacity>
<TouchableOpacity
onPress={() => updateUser(item)} style={styles.button}>
<Text style={styles.buttonText}>
Confirm
</Text>
</TouchableOpacity>
</View>
</Modal>
<View>
<TouchableOpacity
onPress={() => { setModalVisible(true)}}>
</View>
</View>
);
};
平面列表
<FlatList
keyExtractor={keyExtractor}
data={menus}
renderItem={renderItem}
/>
例如,我单击要编辑的平面列表中的项目。它打开了一个模态。我在 textInput 中输入新数据。它更新最后插入的项目,而不是我选择的项目。我认为 keyExtractor 有助于选择平面列表中的项目,但我没有看到我的 keyExtractor 有任何问题。
任何建议将不胜感激。谢谢你。
解决方案
这似乎是因为您所有的模式共享相同的modalVisible
状态(如果不是,请更新您的代码片段)。如果是这种情况,请尝试重构您的代码,以便在 之外仅呈现一个模式,FlatList
然后添加item
/setItem
状态以指定模式应更新的项目。从您的列表项中设置此项。
您还可以使用item
/setItem
来控制模态可见性(在设置项目时显示,然后在隐藏模态时将其设置为 null)。
推荐阅读
- search - Solr - 获取不区分大小写的字符串字段
- google-sheets - 从多列中选择数据并排序
- azure - 使用自定义模板或不使用自定义模板
- elasticsearch - Elasticsearch 快照/存储库
- javascript - 如何从计算的道具中设置子组件中的数据
- c++ - 以非线程安全的方式调用 vector::size / map::size 的含义是什么?
- javascript - 模拟mysql utf8_general_ci 归类
- android - Android 动态功能:错误 -2 模块不可用
- git - 为什么 npm 从 GitLab 获得错误的标签
- jquery - 如何自定义返回历史的ajax分页?