2016-09-21 2 views
5

Я пытаюсь вызвать shuffleCards, когда событие click в компоненте ReactJs. Тем не менее, я получаю следующее сообщение об ошибке:React JS Uncaught Reference Ошибка: функция не определена

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); 
    } 

} 
+7

'this.shuffleCards' – zerkms

+0

@zerkms ничего себе не могу поверить, я не думал делать это. это сработало. благодаря! – janeeyrea

ответ

0

Будет ли это работать для вас? Демо здесь: http://codepen.io/PiotrBerebecki/pen/qaRdgX

Вы пропустили this когда речь идет о shuffleCards в методе handleClickEvent.

shuffleCards(array) { 
    // logic here 
} 

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

render() { 
    return (
    <button onClick={this.handleClickEvent.bind(this)}>Click me</button> 
); 
} 
12

EDIT Только видел комментарии, и что 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 собственности ,

Если вы определили shuffleCards в handleClickMethod, то вы могли бы назвать это без доступа к this:

handleClickEvent(event) { 

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

    // ... 
    if (this.state.count == 0) { 
     cards = shuffleCards(cards); // here you don't need `this.` 
    } 
} 
Смежные вопросы