重新渲染 Flatlist 时出现问题
Problems re-rendering Flatlist
删除给定用户时,我正在努力更新列表。大多数问题来自于我丢失 state
的事实,因为我将函数作为 setParams
.
放置在 componentDidMount
中
componentDidMount() {
...
this.props.navigation.setParams({ removeUser: this._deleteUser});
...
}
这是 _deleteUsers
的功能,它可以很好地删除但不会更新:
_deleteUser(){
var user = firebase.auth().currentUser;
var position;
_.map(this.selectedMembers, item => {
var ref = firebase.database().ref('path')
ref.orderByChild('key').equalTo(item.key).on("value", function(snapshot){
snapshot.forEach(function(child) {
position = child.key
});
});
delete this.students.members[position]
});
firebase.database().ref().child('path').remove();
Toast.show({
text: "Members deleted successfully!",
type: "success",
fontStyle: "italic",
})
}
这一切都应该呈现在下面Flatlist
render() {
...
<FlatList
style={{
flex: 1,
width: "100%",
}}
refreshControl={
<RefreshControl
refreshing={this.state.refreshing}
onRefresh={this.refreshList}
/>}
data={this.state.dataSource}
ItemSeparatorComponent={this.FlatListItemSeparator}
renderItem = {this._renderItem}
listKey={item => item.uid}
extraData={this.state}
/>
}
应用程序的状态是:
constructor(props) {
super(props)
this.state = {
dataSource : [],
text : '',
itemNumber : 0,
selectedItems: [],
groupName: '',
selectedMembers: [],
}
}
state = {
refreshing: false,
}
refreshList = () => {
this.state.refreshing = true;
this.props.navigation.state.params.store = new StudentsStore();
this.state.refreshing = false;
}
我应该如何处理它?我还有许多其他操作,但唯一不起作用的是这个,因为我在 componentDidMount
中处理它的方式,或者至少,这就是我认为这是我不知道如何处理的问题解决。
谢谢,
您在传递回调时丢失了上下文。将回调包装在箭头函数中,您将保留原始上下文。
变化:
componentDidMount() {
...
this.props.navigation.setParams({ removeUser: this._deleteUser});
...
}
为此:
componentDidMount() {
...
this.props.navigation.setParams({ removeUser: () => this._deleteUser()});
...
}
删除给定用户时,我正在努力更新列表。大多数问题来自于我丢失 state
的事实,因为我将函数作为 setParams
.
componentDidMount
中
componentDidMount() {
...
this.props.navigation.setParams({ removeUser: this._deleteUser});
...
}
这是 _deleteUsers
的功能,它可以很好地删除但不会更新:
_deleteUser(){
var user = firebase.auth().currentUser;
var position;
_.map(this.selectedMembers, item => {
var ref = firebase.database().ref('path')
ref.orderByChild('key').equalTo(item.key).on("value", function(snapshot){
snapshot.forEach(function(child) {
position = child.key
});
});
delete this.students.members[position]
});
firebase.database().ref().child('path').remove();
Toast.show({
text: "Members deleted successfully!",
type: "success",
fontStyle: "italic",
})
}
这一切都应该呈现在下面Flatlist
render() {
...
<FlatList
style={{
flex: 1,
width: "100%",
}}
refreshControl={
<RefreshControl
refreshing={this.state.refreshing}
onRefresh={this.refreshList}
/>}
data={this.state.dataSource}
ItemSeparatorComponent={this.FlatListItemSeparator}
renderItem = {this._renderItem}
listKey={item => item.uid}
extraData={this.state}
/>
}
应用程序的状态是:
constructor(props) {
super(props)
this.state = {
dataSource : [],
text : '',
itemNumber : 0,
selectedItems: [],
groupName: '',
selectedMembers: [],
}
}
state = {
refreshing: false,
}
refreshList = () => {
this.state.refreshing = true;
this.props.navigation.state.params.store = new StudentsStore();
this.state.refreshing = false;
}
我应该如何处理它?我还有许多其他操作,但唯一不起作用的是这个,因为我在 componentDidMount
中处理它的方式,或者至少,这就是我认为这是我不知道如何处理的问题解决。
谢谢,
您在传递回调时丢失了上下文。将回调包装在箭头函数中,您将保留原始上下文。
变化:
componentDidMount() {
...
this.props.navigation.setParams({ removeUser: this._deleteUser});
...
}
为此:
componentDidMount() {
...
this.props.navigation.setParams({ removeUser: () => this._deleteUser()});
...
}