0

所以我遇到了一个奇怪的问题,也许我在这里做错了,但我以前没有遇到过这个问题,我的应用程序充满了类似的代码。

基本上,我正在尝试在附加到按钮 onPress 的函数中执行简单的 Firestore get()。出于某种原因,代码没有运行,或者如果是,我没有得到任何反馈。如果我将相同的代码放在 componentDidMount 中,它会运行并给我数据库快照。

这是有问题的两段代码。

针对我正在使用的当前绑定进行了更新

    this.usersRef = firebase.firestore().collection('users');

componentDidMount() {
    this.usersRef
        .get()
        .then((snapshot) => {
            console.log('TEST didMount snapshot', snapshot);
        }).catch((error) => {
            console.log(error)
        });
}


    submitSearch() {
        console.log('submitSearch')
        this.usersRef
            .get()
            .then((snapshot) => {
                console.log('TEST submitSearch snapshot', snapshot);
            }).catch((error) => {
                console.log(error)
            });
}

从这里调用 submitSearch

            <Button style={{marginTop: 3, marginBottom: 8}} primary onPress={() => this.submitSearch()}>
                {strings.search}
            </Button>

所以我在这里尝试了很多东西,但我似乎无法弄清楚为什么代码在 submitSearch 函数中不起作用。我从该功能中看到的唯一内容是控制台日志显示提交搜索。

任何想法,将不胜感激!谢谢。

4

1 回答 1

0

问题在于函数的绑定方式。

我最初在构造函数中有以下内容: this.submitSearch = this.submitSearch.bind(this)

并在按钮组件中调用它

onPress={this.submitSearch}

我删除了构造函数绑定并在按钮组件中使用了以下内容:

onPress={() => this.submitSearch()}

我以为我已经这样做了!但我可以确认这可以解决问题。奇怪的是,虽然没有警告或错误,但似乎它们会有所帮助,而不是仅仅不运行代码。

于 2017-10-21T06:15:43.387 回答