【问题标题】:react native calling a fat arrow function after setState: function is not defined在 setState 之后反应原生调用胖箭头函数:函数未定义
【发布时间】:2019-03-15 21:56:06
【问题描述】:

按下按钮时,我的 App 调用 handlePress 函数,该函数从数组中返回随机对象。

handlePress 功能:

handlePress = () => {
      this.setState({
        vitamin: getRandomIngredient(vitaminArray),
      }, ()=> matchMealPreference())
    }

如果我用 console.log() 替换 matchMealPreference() 就可以了。

设置新状态后,我想立即用粗箭头调用另一个函数。否则我会遇到异步问题。

matchMealPreference 函数如下所示:

matchMealPreference = () => {
      if(this.props.mealPreference === this.state.protein.getIngredientFlag()){
        return state
      } else {
        handlePress()
      }
    }

从数组中获取随机对象的函数:

function getRandomIngredient (arr){
  if (arr && arr.length) {
    return arr[Math.floor(Math.random() * arr.length)];
  }
}

我得到错误:

reference error. matchMealPreference is not defined 

我几乎可以肯定我错过了一些琐碎的事情。但是我已经被这个问题困扰了一天多,所以我想我会向你寻求帮助。

  • 是否有其他方法可以调用 matchMealPrefence 而不会出现异步问题?

  • 是否可以在调用 matchMealPreference 的位置调用函数?

  • 在 matchMealPrefence 函数中再次调用 handlePress 函数是否不明智?

非常感谢任何帮助

编辑:Vijay Menon 的回答是正确的。我需要添加“这个”。谢谢!

【问题讨论】:

    标签: reactjs native setstate


    【解决方案1】:

    您必须在 setState 中使用“this”关键字引用“matchMealPreference”。在“matchMealPreference”函数中调用“handlePress”时,您也必须这样做

    https://codesandbox.io/s/542919430l

       changeStr = () => {
         this.setState({str:"Changed"})
       }
        click = () => {
          this.setState({num:this.state.num+1},() => {
            this.changeStr()
          })
        }
    

    【讨论】:

      猜你喜欢
      • 2018-08-04
      • 1970-01-01
      • 1970-01-01
      • 2016-11-30
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 2017-05-18
      • 2018-07-05
      相关资源
      最近更新 更多