You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native新手求助:构建时出现this.setState is not a function错误

解决React Native中this.setState is not a function的问题

嘿,刚上手React Native遇到这个问题太正常啦,别慌!咱们先拆解下问题根源:

你把this._proximityListener作为监听器传给Proximity.addListener时,这个函数的this上下文已经脱离了App组件实例——简单说就是,此时函数里的this压根找不到组件的setState方法,自然就报错了。

下面给你三种常用的解决办法,选一种顺手的用就行:


方法1:用箭头函数包裹监听器

在componentDidMount传递监听器时,用箭头函数把_proximityListener包起来,强制保留组件的this上下文:

type Props = {};
export default class App extends Component<Props> {
  // 先初始化state,避免setState时出现属性未定义的警告
  state = {
    proximity: false,
    distance: 0
  };

  componentDidMount(){
    // 箭头函数帮你锁定this指向组件实例
    Proximity.addListener((data) => this._proximityListener(data));
  }

  _proximityListener(data) {
    this.setState({
      proximity: data.proximity,
      distance: data.distance // Android-only
    });
  }

  render() {
    return (
      <View style={styles.container}>
        <Text style={styles.welcome}> 00 </Text>
        ...
      </View>
    );
  }
}

方法2:在构造函数中手动绑定this

在组件构造函数里,把_proximityListener的this绑定到组件实例上,这样不管在哪调用这个函数,this都不会跑偏:

type Props = {};
export default class App extends Component<Props> {
  constructor(props: Props) {
    super(props);
    this.state = {
      proximity: false,
      distance: 0
    };
    // 手动绑定,固定this指向
    this._proximityListener = this._proximityListener.bind(this);
  }

  componentDidMount(){
    Proximity.addListener(this._proximityListener);
  }

  _proximityListener(data) {
    this.setState({
      proximity: data.proximity,
      distance: data.distance // Android-only
    });
  }

  render() {
    return (
      <View style={styles.container}>
        <Text style={styles.welcome}> 00 </Text>
        ...
      </View>
    );
  }
}

方法3:用Class Fields语法(箭头函数定义方法)

直接把_proximityListener定义成箭头函数形式的class field,箭头函数会自动捕获当前组件的this上下文,不用额外做绑定操作:

type Props = {};
export default class App extends Component<Props> {
  state = {
    proximity: false,
    distance: 0
  };

  componentDidMount(){
    Proximity.addListener(this._proximityListener);
  }

  // 箭头函数定义方法,自动绑定组件的this
  _proximityListener = (data) => {
    this.setState({
      proximity: data.proximity,
      distance: data.distance // Android-only
    });
  }

  render() {
    return (
      <View style={styles.container}>
        <Text style={styles.welcome}> 00 </Text>
        ...
      </View>
    );
  }
}

小提醒:记得一定要初始化组件的state哦,不然第一次触发setState时可能会出现不必要的警告~

内容的提问来源于stack exchange,提问作者User_3535

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:11:34