Javascript 不可触摸高光

Javascript 不可触摸高光,javascript,arrays,react-native,ecmascript-6,Javascript,Arrays,React Native,Ecmascript 6,我有这个密码 constructor(props){ super(props); this.MyClick = this.MyClick.bind(this) } MyClick() { alert('ohoho') }; AnyRequest = () => { if(this.state.Array.length > 0 && this.state.Loaded === true){ return this.state.

我有这个密码

constructor(props){
    super(props);
    this.MyClick = this.MyClick.bind(this)
}
MyClick() {
  alert('ohoho')
};
AnyRequest = () => {
    if(this.state.Array.length > 0 && this.state.Loaded === true){
        return this.state.Array.map(function(Data){
            return(
              <View>
                <TouchableHighlight underlayColor="#ccc" onPress={this.MyClick}>
                    <Icon name="check" size={30} color="#2eb82e" />
                </TouchableHighlight>
              </View>

            );
        });
    }
};
构造函数(道具){
超级(道具);
this.MyClick=this.MyClick.bind(this)
}
MyClick(){
警报(“ohoho”)
};
AnyRequest=()=>{
if(this.state.Array.length>0&&this.state.Loaded==true){
返回此.state.Array.map(函数(数据){
返回(
);
});
}
};

我不知道为什么它不起作用。首先,当我在构造函数中使用
MyClick=()=>
而不是binding函数时,它说undefined不是一个对象。一旦我在构造函数中绑定了我的函数,它就不再显示错误,但它看起来不像是一个
TouchableHighlight
按钮。即使是
underlayColor
也不起作用。

好的,因此从评论中,我们可以得出结论,
TouchableHighlight
确实是可点击的。只是您的
onPress
语法不正确。对于在绑定和ES6语法方面没有太多经验的开发人员来说,这是一个非常常见的错误。已经有很多报道了,所以我不会深入讨论。相反,我将指出在React Native中纠正定义
onPress
的两种常见方法(也有一些方法,但它们只是部分相关):

TouchableHighlight
onPress
属性要求向其传递一个函数。因此,
{}
之间的任何内容都需要是一个函数。执行此操作的第一种方法是使用箭头语法,我怀疑您做得不正确:

MyClick = () => {
  alert('ohoho')
};

// ... later on ...

<TouchableHighlight underlayColor="#ccc" onPress={this.MyClick}>
  <Icon name="check" size={30} color="#2eb82e" />
</TouchableHighlight>
请注意如何在
{}
中定义箭头函数,然后在该函数中实际调用
MyClick


如果您不理解其中的区别,或者犯了很多类似的错误,那么我建议您重新学习ES6和ES7,因为这几乎是编写React本机代码的一个要求。有在线帮助。

好的,因此从评论中,我们可以得出结论,
触控突出显示确实是可点击的。只是您的
onPress
语法不正确。对于在绑定和ES6语法方面没有太多经验的开发人员来说,这是一个非常常见的错误。已经有很多报道了,所以我不会深入讨论。相反,我将指出在React Native中纠正定义
onPress
的两种常见方法(也有一些方法,但它们只是部分相关):

TouchableHighlight
onPress
属性要求向其传递一个函数。因此,
{}
之间的任何内容都需要是一个函数。执行此操作的第一种方法是使用箭头语法,我怀疑您做得不正确:

MyClick = () => {
  alert('ohoho')
};

// ... later on ...

<TouchableHighlight underlayColor="#ccc" onPress={this.MyClick}>
  <Icon name="check" size={30} color="#2eb82e" />
</TouchableHighlight>
请注意如何在
{}
中定义箭头函数,然后在该函数中实际调用
MyClick


如果您不理解其中的区别,或者犯了很多类似的错误,那么我建议您重新学习ES6和ES7,因为这几乎是编写React本机代码的一个要求。有在线帮助。

我终于找到了。问题不在onPress函数中,而在map函数中。我一创建新函数,它就创建了一个新的作用域,这意味着
这个
不再是指
AnyRequest
函数。最后ES6箭头修复了它

constructor(props){
super(props);
this.MyClick = this.MyClick.bind(this)
}
MyClick() {
alert('ohoho')
};
AnyRequest = () => {
if(this.state.Array.length > 0 && this.state.Loaded === true){
    return this.state.Array.map((Data) => (
          <View>
            <TouchableHighlight underlayColor="#ccc" onPress={() => 
                this.MyClick();
            }}>
                <Icon name="check" size={30} color="#2eb82e" />
            </TouchableHighlight>
          </View>
        ));
      }
   };
构造函数(道具){
超级(道具);
this.MyClick=this.MyClick.bind(this)
}
MyClick(){
警报(“ohoho”)
};
AnyRequest=()=>{
if(this.state.Array.length>0&&this.state.Loaded==true){
返回此.state.Array.map((数据)=>(
这个.MyClick();
}}>
));
}
};

我终于拿到了。问题不在onPress函数中,而在map函数中。我一创建新函数,它就创建了一个新的作用域,这意味着
这个
不再是指
AnyRequest
函数。最后ES6箭头修复了它

constructor(props){
super(props);
this.MyClick = this.MyClick.bind(this)
}
MyClick() {
alert('ohoho')
};
AnyRequest = () => {
if(this.state.Array.length > 0 && this.state.Loaded === true){
    return this.state.Array.map((Data) => (
          <View>
            <TouchableHighlight underlayColor="#ccc" onPress={() => 
                this.MyClick();
            }}>
                <Icon name="check" size={30} color="#2eb82e" />
            </TouchableHighlight>
          </View>
        ));
      }
   };
构造函数(道具){
超级(道具);
this.MyClick=this.MyClick.bind(this)
}
MyClick(){
警报(“ohoho”)
};
AnyRequest=()=>{
if(this.state.Array.length>0&&this.state.Loaded==true){
返回此.state.Array.map((数据)=>(
这个.MyClick();
}}>
));
}
};

你能给我看一下课程的全部内容吗?
TouchableHighlight
或它的子项(
图标
)到底有没有呈现?如果您这样做,是否向控制台打印任何内容:
{console.log('test');}}>
@MichaelCheng图标正常呈现。您编写的示例
{console.log('test');}}}>
运行良好,但此
不行。我只能用这种方式编写完整的函数。你能给我看一下这个类的全部内容吗?
TouchableHighlight
或它的子对象(
图标
)到底呈现了什么?如果您这样做,是否向控制台打印任何内容:
{console.log('test');}}>
@MichaelCheng图标正常呈现。您编写的示例
{console.log('test');}}}>
运行良好,但此
不行。我只能这样写完整的函数。