开发者问题收集

React JS 未捕获的引用错误:函数未定义

2016-09-21
41539

我尝试在 ReactJs 组件中发生点击事件时调用 shuffleCards。但是,我收到以下错误:

Uncaught ReferenceError: shuffleCards is not defined

这是我的代码:

constructor(props) {
    super(props);

    this.state = {
        count: 0
    };
}

shuffleCards(array) {
    var i = array.length,
        j = 0,
        temp;

    while (i--) {
        j = Math.floor(Math.random() * (i+1));

        temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
    return array;
}

handleClickEvent(event) {
    var cards = [
        {txt: "A",
        isDisplayed: false},
        {txt: "B",
        isDisplayed: false},
        {txt: "C",
        isDisplayed: false}
    ];
    if (this.state.count == 0) {
        cards = shuffleCards(cards);
    }

}
3个回答

编辑 刚刚看到评论, zerkms 已经为您提供了解决方案。为了澄清起见,我将留下我的答案。


您的问题是,在 handleClickMethod 中,您调用的是 shuffleCards 而不是 this.shuffleCards

shuffleCards(array) {
  // ...
}

handleClickEvent(event) {
    // ...
    if (this.state.count == 0) {
        cards = this.shuffleCards(cards); // here you should use `this.`
    }
}

原因是 shuffleCards 方法是在您的组件上定义的,可以通过 this 属性从其方法中访问。

如果您在 handleClickMethod 中定义了 shuffleCards ,那么您可以在不访问 this 的情况下调用它:

handleClickEvent(event) {

    function shuffleCards(array) {
      // ...
    }

    // ...
    if (this.state.count == 0) {
        cards = shuffleCards(cards); // here you don't need `this.`
    }
}
nem035
2016-09-21

这对您有用吗?演示在这里: http://codepen.io/PiotrBerebecki/pen/qaRdgX

handleClickEvent 方法中引用 shuffleCards 时,您错过了 this

shuffleCards(array) {
  // logic here
}

handleClickEvent(event) {
  cards = this.shuffleCards(cards);
}

render() {
  return (
    <button onClick={this.handleClickEvent.bind(this)}>Click me</button>
  );
}
Piotr Berebecki
2016-09-21

我遇到了同样的问题。

我升级了“ react-scripts ”并解决了此问题。

可能会修复此问题。

npm i react-scripts
Burak
2019-09-24