React native TouchableOpacity onPress问题

时间:2017-03-13 12:34:08

标签: react-native touchableopacity

我有一个简单的图标按钮,如下所示:

class SideIcon extends Component {
  render() {
    return (
      <TouchableOpacity onPress={console.log('puff')} style={styles.burgerButton}>
        <Icon name="bars" style={styles.burgerIcon}/>
      </TouchableOpacity>
    );
  }
}

从以下组件调用:

export default test = React.createClass({
  getInitialState: function() {
    return {
      isModalOpen: false
    }
  },

  _openModal() {
    this.setState({
      isModalOpen: true
    });
  },

  _closeModal() {
    this.setState({
      isModalOpen: false
    });
  },
  render() {
    return (
     <View style={styles.containerHead} keyboardShouldPersistTaps={true}>
     **<SideIcon openModal={this._openModal} closeModal={this._closeModal} />**
      <Text style={styles.logoName}>DareMe</Text>
      <SideBar isVisible={this.state.isModalOpen} />
     </View>
    );
  }
});

onPress上的TouchableOpacity永远不会有效。我哪里错了?虽然它在组件加载期间显示控制台语句。

2 个答案:

答案 0 :(得分:8)

您应该绑定一个调用代码的函数。

例如:

<TouchableOpacity onPress={() => console.log('puff')} style={styles.burgerButton}>
  <Icon name="bars" style={styles.burgerIcon}/>
</TouchableOpacity>

更好的方法是给它一个组件函数的引用

class SideIcon extends Component {
  handleOnPress = () => {
    console.log('puff')
  }
  render() {
    return (
      <TouchableOpacity onPress={this.handleOnPress} style={styles.burgerButton}>
        <Icon name="bars" style={styles.burgerIcon}/>
      </TouchableOpacity>
    );
  }
}

答案 1 :(得分:0)

你应该传递一个粗箭头函数来调用你的代码,而不是传递一个函数。 应该是这样的

onPress={() => console.log('puff')}

完整示例是

class SideIcon extends Component {
      render() {
        return (
          <TouchableOpacity onPress={() => console.log('puff')} style={styles.burgerButton}>
            <Icon name="bars" style={styles.burgerIcon}/>
          </TouchableOpacity>
        );
      }
    }
相关问题