当有人发送时,我的平面列表没有显示新消息。反应本机

My flatlist doesn't show up the new message when someone was send. React-Native

当我收到来自另一个人的短信时,我必须向上滚动一点才能显示新消息。当我发送消息时,它的工作方式不同,它只是在没有滚动的情况下显示

RN 0.59,信号R

我如何收到消息

 componentDidMount() {
    this._isMounted = true;

    this.refreshDataFromServer();

    hub.on("message", (id, name, msg, img, uId) => {
        if (this._isMounted) {
            if (id !== null) {
                //let mess = '{"Name":"' + name + '","Message":"' + msg + '","Image":"' + img + '"}';
                let mess = '{"Id":"' + id + '","Name":"' + name + '","Message":"' + msg + '"}';

                var obj = JSON.parse(mess.toString());
                this.state.data.push(obj);

               
            }
        }
    });
    hub.on("Loading", () => { }
    );
    hub.on("doneLoad", () => { }
    );
}

我的平面列表

render() {
        return (
            <View style={styles.container}>
                 <FlatList
                    data={this.state.data}
                    removeClippedSubviews={false} 
                    extraData={this.state.data}
                    ref={(ref) => { this.flatListRef = ref; }}
                    onContentSizeChange={()=> this.flatListRef.scrollToEnd()}
                    renderItem={({ item, index }) => {
                        return (
                            <FlatListItem item={item} index={index} navigation={this.props.navigation}>

                            </FlatListItem>);
                    }}
                    keyExtractor={(item, index) => String(index)}
                    refreshControl={
                        <RefreshControl
                            refreshing={this.state.refreshing}
                            onRefresh={this.onRefresh}
                        />}
                />
                <View style={styles.footer}>
                    <View style={styles.inputContainer}>
                        <TextInput style={styles.inputs}
                            multiline = {true}
                            ref={input => { this.textInput = input }}
                            placeholder="Write a message..."
                            underlineColorAndroid='transparent'
                            onChangeText={(text) => this.updateValue(text, 'sendMessage')}>
                        </TextInput>    
                    </View>

                    <TouchableOpacity style={styles.btnSend}
                        onPress={this.sendMessage}>
                        <Image source={{ uri: "https://png.icons8.com/small/75/ffffff/filled-sent.png" }} style={styles.iconSend} />
                    </TouchableOpacity>
                </View>
            </View>
        );
    }

我是 RN 的新手,所以我真的不知道 RN 中的生命周期是如何工作的。谢谢

您不应该直接将值设置为状态 this.state.data.push(obj)

不会触发render.Instead,需要使用setState

this.setState({
     data: this.state.data.concat(obj)
})