2017-06-21 211 views
1

我需要你的帮助!我的目标是在点击按钮后改变按钮的样式!我听说direct manipulation,我决定试一试。现在我不知道为什么,但是我的TouchableOpacity中的onPress不起作用。下面是代码:onPress在TouchableOpacity不会触发

<TouchableOpacity onPress={() => this.changeStyle}> 
    <TouchableHighlight style={styles.answer} ref="answer1"> 
     <Text ...> Some Text </Text> 
    </TouchableHighlight> 
</TouchableOpacity> 

,这里是我的changeStyle功能:

changeStyle() { 
    this.refs['answer1'].setNativeProps({ 
     style: { backgroundColor: "#13a88a"} 
    }); 
} 

现在我不知道为什么,但“onPress”永远不会触发。 谢谢你的回答!

+0

添加'onPress'到'TouchableHighlight'和输出的东西来测试是否这需要该事件。我怀疑它会这样做。 – G0dsquad

+0

@ G0dsquad我已经做到了,里面TouchableHighlight的onPress工作。问题是我不能调用里面的函数changeStyle,因为它是我想改变风格的TouchableHighlight。而setNativeProps只适用于容器的孩子(这里的TouchableOpacity是容器,TouchableHighlight是孩子)。 –

+1

可以请你加入'()''到this.changeStyle' –

回答

4

如果你想使用“this.changeStyle`执行功能,写你的onPress,如下所示:

<TouchableOpacity onPress={this.changeStyle}/>

如果你打算到onPress道具执行this.changeStyle内传递一个函数写你的onPress,如下所示:

<TouchableOpacity onPress={() => this.changeStyle()}/>

PS:为什么你有一个<TouchableHighlight/>里面<TouchableOpacity/>?只需使用一个并添加onPress道具就可以了。

+0

谢谢!为什么我使用''里面TouchableOpacity' TouchableHighlight'是因为文档中我看到'setNativeProps'用于更新孩子的道具。我想改变按钮的风格,在这种情况下,'TouchableHighlight'和'Text'里面 –

+0

然后我看到没有使用的TouchableOpacity。你可以添加onPress到TouchableHighlight,它也可以工作。如果它解决了您的问题,请尽量标记为已解决。 – Raymond