React Native函数范围(从子函数调用父函数)

时间:2016-10-13 03:20:02

标签: javascript listview reactjs react-native ecmascript-6

我试图了解功能范围。 _internalFunction效果很好,但如何调用_externalFunction

我在_renderRow中尝试了self=this然后this._externalFunction并尝试了() => {this._externalFunction}但是它没有用。

class sandbox extends Component {
    //some code removed for clarity

    _renderRow(item) {
      const _internalFunction = () => {
        Alert.alert('Internal');
      };
      return (<Text onPress={_internalFunction}>{item}</Text>);
    }

    _externalFunction() {
      Alert.alert('External');
    };
}

以下是React Native Playground中的代码: https://rnplay.org/apps/5CIGvA

提前致谢! :)

1 个答案:

答案 0 :(得分:0)

在ES6中,您需要手动将this绑定到实例。以下是React documentation的引用:

  

在声明为ES6类的React组件中,方法遵循相同的方法   语义作为常规ES6类。这意味着他们没有   自动将this绑定到实例。你必须明确   在构造函数中使用.bind(this)

因此,您需要在构造函数中绑定您的函数:

constructor() {
    super();
    this._externalFunction = this._externalFunction.bind(this);
}

然后您可以在组件中使用this._externalFunction

_renderRow(item) {
    return (<Text onPress={this._externalFunction}>{item}</Text>);
}