Компонент не выполняет повторную визуализацию после отправки формы с использованием маршрутизатора.

У меня есть список видео на моем домашнем экране, запрошенный последними, когда пользователь отправляет видео, оно должно идти вверху списка, но вместо этого оно добавляется в конец списка, пока я не перезапущу приложение. Я считаю, что это происходит потому, что запрос на сортировку по самым последним не выполняется, пока приложение не обновится. Как мне получить мой VideoFeed компонент для повторной визуализации после отправки?

В моем Submit.js страница у меня есть действие reset Главная сцена, которая возвращается к моей Home.js посмотреть, где находится видео канал. getData Функция отправляет сообщение в мою базу данных Firebase:

onSubmit(data) {
    this.setState({error: error}); //clear out error messages
    var submittedLink = data.link;
    var jsonUrl = 'https://www.youtube.com/oembed?format=json&url=' + submittedLink;
    var youtubeData = getData(jsonUrl, submittedLink);
    Actions.reset("Main"); //THIS IS THE RELEVANT LINE
}

А вот мой VideoFeed компонент, который отображает список видео на моей домашней странице компонента:

class VideoFeed extends React.Component {
    constructor() {
        super();
        this.state = {
            dataSource: new ListView.DataSource({
                rowHasChanged: (row1, row2) => row1 !== row2,
            })
        };
        this.dataRef = database.ref("music");
    }

    listenForMusic(dataRef){
        let items = [];
        dataRef.orderByChild("date").on('child_added', (snap) => {
                items.push({
                    videoURL: snap.val().videoURL,
                    title: snap.val().title,
                    thumbnail: snap.val().thumbnail
                });
                console.log(items);
                this.setState({
                    dataSource: this.state.dataSource.cloneWithRows(items)
                });
        });

    }

    componentWillMount() {
        this.listenForMusic(this.dataRef);
    }

    _renderItem(item) {
        return(
            <TouchableHighlight
                onPress={Actions.Submit}
            >
                <View style={styles.mediaContainer}>
                    <Image 
                        source={{uri: item.thumbnail }}
                        style={styles.mediaThumbnail}
                    />
                    <View style={styles.mediaMetaContainer}>
                        <View style={styles.topMetaContainer}>
                            <Text style={styles.mediaTitle}>
                                {item.title}
                            </Text>
                            <Text style={styles.sharedByUser}>
                            UNCVRD
                            </Text>
                        </View>
                        <View style={styles.bottomMetaContainer}>
                            <Icon
                                name='youtube-play'
                                type='material-community'
                                color='#ff0000'
                                size={16}
                            />
                            <View style={styles.bottomRightContainer}>
                                <Icon
                                    name='thumb-up'
                                    size={12}
                                    color='#aaa'
                                />
                                <Text style={styles.metaLikeCounter}>
                                    16
                                </Text>
                            </View>
                        </View>
                    </View>
                </View>
            </TouchableHighlight>
        );
    }

    render() {
        return (
            <View>
                <ListView dataSource={this.state.dataSource} renderRow={this._renderItem.bind(this)}> </ListView>
            </View>
        );
    }

}

я использую componentWillMount() вызвать запрос. Но очевидно, что компонент уже смонтирован в истории, поэтому он не запускается снова, когда я возвращаюсь на домашнюю страницу. Что мне нужно запустить, чтобы вызвать VideoFeed компонент повторно сделать?

Вот мой соответствующий код в routes.js страница, если вам это нужно:

<Router>
                <Scene key="root" hideNavBar
                        navigationBarStyle={{backgroundColor: "#fff"}}
                        titleStyle={navTitleStyle}
                        backButtonTintColor={color.black}
                >
                    <Stack key="Main" initial={this.state.isLoggedIn}>
                        <Scene key="Home" component={Home} title="Home" initial={true} type={ActionConst.REPLACE}/>
                        <Scene key="Video" component={Video} title="Video"/>
                        <Scene key="Profile" component={Profile} title="Profile"/>
                        <Scene key="Leaderboard" component={Leaderboard} title="Leaderboard"/>
                        <Scene key="Submit" component={Submit} title="Submit" />
                    </Stack>
                </Scene>
            </Router>

0 ответов

Другие вопросы по тегам