React native undefined не является функцией

Я новичок, чтобы реагировать родной. Я пытаюсь нажать на другую страницу. Но я получаю сообщение об ошибке

Undefined is not a function(evaluating '_this2._goToProductListing('app.productListing'{title:item.title})')

Мой код это

 _renderContent(section, i, isActive) {
        return (
            <View>
                <List>
                    {section.content.map((item, i) => {
                        return(
                            <ListItem containerStyle={styles.categoryLists}
                                      onPress={() => this._goToProductListing('app.productListing',{title:item.title})}
                                      key={i} title={item.title}
                            />
                        );
                    })}
                </List>
            </View>
        );
    }


    //Send to product list page
    _goToProductListing = (screen,data) => {
        this.props.navigator.push({
            screen: screen,
            title: data.title,
            passProps: {
                data: data
            }
        });
    };
render() {
        return (


            <View style={stylesheet.accrodianWraper}>

                <ScrollView>
                    <Accordion
                        activeSection={this.state.activeSection}
                        sections={CONTENT}
                        touchableComponent={TouchableOpacity}
                        renderHeader={this._renderHeader}
                        renderContent={this._renderContent}
                        duration={0}
                        onChange={this._setSection.bind(this)}
                    />
                </ScrollView>
            </View>
        )
    }

Может кто-нибудь, пожалуйста, скажите мне, где я делаю неправильно?? И как я могу это исправить?

Для навигации я использую wix react native navigation, а страница app.productListing тоже прописана в index.js. И я использую react-native-collapsible для аккордеона, B


person user7747472    schedule 20.05.2018    source источник
comment
Я думаю, вы потеряли контекст здесь: renderContent={this._renderContent}   -  person Jonas Wilms    schedule 20.05.2018
comment
Что ты имеешь в виду? Содержимое аккордеона отображается правильно. Только когда я нажимаю на элемент, чтобы перейти на следующую страницу, эта ошибка появляется вместо того, чтобы подтолкнуть меня к следующей странице.   -  person user7747472    schedule 20.05.2018
comment
@ user7747472 - см. ответы на связанный вопрос. Ваш renderContent — это метод. renderContent={this._renderContent} просто передает ссылку на функцию, не указывая, что this использовать. Ответы на связанные вопросы показывают, как убедиться, что используется правильный this.   -  person T.J. Crowder    schedule 20.05.2018
comment
@T.J.Crowder, большое спасибо TJ за очень полезную ссылку. Я понятия не имел об этом. Спасибо еще раз   -  person user7747472    schedule 20.05.2018


Ответы (1)


Попробуйте также сделать _renderContent свойством со стрелкой:

_renderContent = (section, i, isActive) => {
person Tomasz Mularczyk    schedule 20.05.2018
comment
Большое спасибо . Это сработало. Я не понимаю, почему это =› хотя - person user7747472; 20.05.2018
comment
@user7747472 user7747472, потому что в вашем примере _renderContent вызывается в Accordion, а Accordion не имеет этого метода. Функция стрелки помогает вам избежать этого, привязывая this к контексту, в котором она используется. - person Tomasz Mularczyk; 20.05.2018
comment
Это часто публикуемая проблема с твердой целью: stackoverflow.com/questions/33973648/ Нам не нужен еще один ответ на него. - person T.J. Crowder; 20.05.2018