【发布时间】:2018-05-21 19:07:48
【问题描述】:
我正在尝试使用 react native 和 firebase 构建聊天应用界面,但在更新从我的数据库中获取的数据时遇到问题。我可以将现有数据加载到我正在使用的 Flatlist 中:
const firebaseApp = firebase.initializeApp(firebaseConfig);
let db = firebaseApp.database();
let ref = db.ref("/room");
componentDidMount() {
ref.on('value', function(snapshot) {
snapshot.forEach(function (childSnapshot){
childData.push(childSnapshot.val());
});
this.setState({
messages: childData
});
messageCount = snapshot.numChildren();
}.bind(this));
}
平面列表代码:
<KeyboardAvoidingView style={styles.inputContainer}>
<FlatList
data={this.state.messages}
// renderItem={({item}) =><Text>{item.contents}</Text>}
keyExtractor = {item => item.timestamp}
renderItem={({item}) => <Bubble style={{margin: 10}}
color="#FFC800" arrowPosition='right'>{item.contents}</Bubble>}
/>}
/>
<Button onPress={()=>{this.onPressButton()}} title="Send">Click me</Button>
</KeyboardAvoidingView>
这是我将文本输入中的文本添加到数据库的地方
function addMessage(messageText) {
messageCount++;
firebase.database().ref('room/'+messageCount).set({
contents: messageText,
timestamp: firebase.database.ServerValue.TIMESTAMP
});
}
但每当我尝试发送消息时,它都会正确添加到数据库中,但平面列表会更新以显示:
上一条消息和新消息多次呈现的位置。将数据库中的新项目呈现到平面列表中的最佳方法是什么?
【问题讨论】:
标签: javascript react-native firebase-realtime-database expo react-native-flatlist