【问题标题】:Problems re-rendering Flatlist重新渲染平面列表的问题
【发布时间】:2019-09-07 12:31:39
【问题描述】:

删除给定用户时,我正在努力更新列表。大部分问题来自于我丢失了state,因为我将函数放在componentDidMount 中作为setParams

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 中处理它的方式,或者至少,我认为这是我不知道如何解决的问题。

谢谢,

【问题讨论】:

    标签: react-native react-native-flatlist mobx-react


    【解决方案1】:

    传递回调时,您正在丢失上下文。将回调包装在箭头函数中,您将保留原始上下文。

    变化:

    componentDidMount() {
        ...
        this.props.navigation.setParams({ removeUser: this._deleteUser});
        ...
    }
    

    为此:

    componentDidMount() {
        ...
        this.props.navigation.setParams({ removeUser: () => this._deleteUser()});
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 2017-09-09
      • 2021-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-04
      • 2023-04-03
      • 2019-11-07
      • 2013-09-26
      相关资源
      最近更新 更多