undefined不是React Native

时间:2018-01-23 08:58:45

标签: android reactjs react-native react-router

嗨,我是新生的反应本地人,我正在开发示例聊天应用。目前我正面临一个基本的导航问题。任何帮助表示赞赏。

我需要在点击时从聊天列表导航到聊天屏幕。我使用Android模拟器使用Android工作室。为此,我写了剧本。但是当我点击右下角的on_ress函数时,我得到了错误,该函数在下面的代码中定义了

onContactPress = (item) =>{
      Alert.alert();        
}    

renderFlatListItem({item}) {
  return (
    <View style={styles.container}>
      <TouchableOpacity onPress={() => this.onContactPress(item)} >
        <Image style={styles.rightArrow}
          source={require('../../images/right_arrow.png')}/> 
      </TouchableOpacity>
    </View>
   )  
}

,错误是

undefined is not an object (evaluating '_this3.onContactPress()')

我在这里做错了什么?有没有办法将所选人员的联系方式传递给下一个屏幕?请帮帮我。

5 个答案:

答案 0 :(得分:0)

这是在React Class o功能组件中吗?

如果第二次通话只是onContactPress没有这个,如果你的情况是第一次,也许你有一个babel问题。

答案 1 :(得分:0)

好的尝试这个解决方案

更改你的onContactPress

<强>从

onContactPress = (item) =>{
  Alert.alert();        
 }    

onContactPress({item}) {
      Alert.alert();        
}    

因为胖箭头函数应该在类

之外定义

答案 2 :(得分:0)

您现在可能已经解决了这个问题。我自己是 React-Native 的新手,在遇到同样的问题后遇到了你的问题,我意识到答案一直在我面前。

Error Prone Script

我有一个组件,其状态包含使用构造函数方法创建的名称数组。 理想情况下,渲染时这是我在 Android 设备 A list of User names 上期望的布局,因为我已经分配了一个键属性和名称数组索引的值,当单击用户名时,我想控制台。 log(i), (i) 是作为参数提供给 onPress={} 事件侦听器中的 getValue() 函数的索引。

但这正是我收到 TypeError: undefined is not an object (evaluating 'this.getValues') 错误的原因。

我试着阅读文档,我用谷歌搜索,我查看了以前的工作代码,我做了所有的事情,但没有任何效果。

直到我从这里更改了我的 renderName 方法后,才起作用

getValues(i){
    console.log(i);
}
renderName(){
    return this.state.names.map(function(name,i){
        return (
            <View>
                <TouchableHighlight
                    key={i}
                    style={styles.viewName}
                    onPress={() => this.getValues(i)}>
                        <Text style={styles.name}>{name}</Text>
                </TouchableHighlight>
            </View>
        )
    })
}

为此

getValues(i){
    console.log(i);
}
renderName(){
    return this.state.names.map((name,i) => {
        return (
            <View>
                <TouchableHighlight
                    key={i}
                    style={styles.viewName}
                    onPress={() => this.getValues(i)}>
                        <Text style={styles.name}>{name}</Text>
                </TouchableHighlight>
            </View>
        )
    })
}

唯一的区别是我使用了一个粗箭头函数 this.state.names.map((name,i) => { 而不是普通的 this.state.names .map(function(name,i){

做出改变后的结果正是我所期待的Clicking a user name output the index associated with the name in the array

这可能无法解决您的问题,但我还是会通过以下几点说明

  • 我试图过于熟悉一个我基本上刚刚开始学习的图书馆,从而导致了我的问题。
  • 并不是每个新的错误都应该让我们恐慌,那时我们会开始问一堆问题,而不是冷静地意识到错误的原因就在我们面前。
  • 在学习过程中尝试代码是一件好事,但请确保代码按照教程的指示工作,并且在开始进行更改和尝试之前,您完全理解它。

答案 3 :(得分:0)

据我所知,您可能正在使用功能组件,而在功能组件中,您可以直接调用方法而不使用它。只需在方法外添加 const 关键字,无需此关键字即可调用。

答案 4 :(得分:-1)

OnPress使用一个函数,而不是发送封装函数。

试试这个

onContactPress = (item) =>{
  Alert.alert();        
}    

renderFlatListItem({item}) {
return (
<View style={styles.container}>
  <TouchableOpacity onPress={this.onContactPress(item)} >
    <Image style={styles.rightArrow}
      source={require('../../images/right_arrow.png')}/> 
  </TouchableOpacity>
</View>
)  
}