如何在 react-native 的函数中调用函数?

How to call function in a function on react-native?

嗨,这是我第一次使用 javascript 和 react-native 开发应用程序,这是一个菜鸟问题。如何在 __onRegionChangeComplete 函数中调用 _getData 函数?我试过 this._getData() 它显示

error: undefined is not a function(evaluation'this._getData()')').

var React = require('react-native');

var {
  StyleSheet,
  Text,
  View,
  Image,
  MapView,
  Component,
} = React;

class Map extends Component {
  render() {
    return (
      <View style={styles.container}>
        <MapView style={styles.map} 
          showsUserLocation={true}
          onRegionChangeComplete={this._onRegionChangeComplete}
        />
      </View>
    );
  }

  _onRegionChangeComplete(region)
  {

  }

  _getData()
  {

  }
}

var styles = StyleSheet.create({
  container:{
    flex: 1
  },
  map: {
    flex: 1,
  },
  image: {
    width: 64,
    height: 64
  }
});

module.exports = Map;

您应该解决一个可能导致错误的语法注释:在 class 中的每个方法的右括号后添加一个逗号。尝试并编辑您的 post 以查看是否有任何错误。 (抱歉,我会把它放在评论中,但没有足够的声誉!)

将extends组件改成createclass,在每个函数后面加逗号即可解决。阅读关于它们的简要介绍是 createclass 具有自动绑定功能,而 extends component 不会为您执行此操作,因此您必须自己绑定它们。

var React = require('react-native');

var {
  StyleSheet,
  Text,
  View,
  Image,
  MapView,
  Component,
} = React;

var Map = React.createClass({
  render(){
    return (
      <View style={styles.container}>
        <MapView style={styles.map} 
          showsUserLocation={true}
          rotateEnabled={false}
          onRegionChangeComplete={this.onRegionChangeComplete}
        />
      </View>
    );
  },

  onRegionChangeComplete(region) {
    this.getData(region)
  },

  getData(region) {

  },
});

var styles = StyleSheet.create({
  container:{
    flex: 1
  },
  map: {
    flex: 1,
  },
  image: {
    width: 64,
    height: 64
  }
});

module.exports = Map;

举个例子,希望对你有帮助。

1.Of当然可以用ES5的feature(createClass)代替ES6的(extends class)方法来解决这个绑定问题

2.You 可以继续使用ES6,只是小心绑定this。 例如在我的组件

_func1(){
    ...
}

_func2(){
  this._func1()
}

如果我想在func2中调用_func1(),'this'绑定到_func2本身,当然那里没有func1()

但是如果我在调用_func2()时将_func2()绑定到组件上下文,问题就解决了。

<subComponent subProp = {this._func2.bind(this)} />

希望对你有帮助。

这个例子肯定有用

export default class Setup extends Component {
  _onPressButton() {
    Alert.alert('You tapped the button!')
  }

  render() {
    return (
      <View style={styles.container}>
      <View>
        <Text h1>Login</Text>
        </View>
        <View>
        <Button
          onPress={this._onPressButton}
          title="Learn More"
          color="#841584"
          accessibilityLabel="Learn more about this purple button"
        />
        </View>
      </View>
    );
  }
}

你必须使用 ES6 的方式来做一个功能,否则它不会工作,特别是对于更高的版本,比如 0.59。在 class 中调用函数时,下面的代码应该可以工作。您已经正确地使用 this._onRegionChangeComplete、

调用该函数
  constructor(props) { 
  super(props); 
  this.state = {sliderValue: 15,}
  }

  var Map = React.createClass({
     render(){
     return (
     <View style={styles.container}>
        <MapView style={styles.map} 
         showsUserLocation={true}
         rotateEnabled={false}
         onRegionChangeComplete={this._onRegionChangeComplete}
    />
  </View>
    );
 },
  _onRegionChangeComplete=()=>
    {
        //Your code here. you can use this.variable if you want to use variables from 
        //your constructor(props) { super(props); this.state = {sliderValue: 15,} }

       //Example passing variable
       let Myvalue = this.state.sliderValue;

     }