Переключение компонента с зависимостью от состояния

#reactjs #toggle #react-props

#reactjs #переключение #реагировать-реквизит

Вопрос:

Я пытаюсь создать меню для выбора уровня игры и создания настольной игры соответственно.

Приложение вылетает каждый раз, когда я нажимаю кнопку Easy (или любую другую, другие еще не реализованы).

Я предполагаю, что это связано с зависимостью компонента MemGame в свойствах строк и столбцов от состояния, но я не могу придумать способ удалить эту зависимость, есть ли способ исправить эту проблему? Или как бы вы порекомендовали сделать это по-другому?

Спасибо,

 state = { 
    rows: 0,
    columns: 0,
    levelMenu: true
 }
render() { 
    return ( 
        <div>
        {this.state.levelMenu?
        <div>
            <Button onClick={()=>this.handleLevelClick(1)}>Easy</Button>
            <Button onClick={()=>this.handleLevelClick(2)}>Medium</Button>
            <Button onClick={()=>this.handleLevelClick(3)}>Hard</Button>
            <Button onClick={()=>this.handleLevelClick(4)}>VeryHard</Button>
        </div>
        :
        <MemGame rows={this.state.rows} columns={this.state.columns} />}
        </div>
     );
}

handleLevelClick(level){
    if(level===1){
        this.setState({rows:2,columns:2});
    }
    .......
 this.toggleMenu()
}

toggleMenu(){
    this.setState({levelMenu: !this.state.levelMenu});
}
  

в конце строки и столбцы переходят в состояние в другом компоненте

 class Board extends Component {   
state={
    board: this.initialBoard(this.props.rows,this.props.columns),
    numOfOpenCards: 0,
    lastId: "",
    matchCounter:0,
    clickCount: 0, 
    isFinished: false,
    firstClick: false,
    resetRequest: false    
}



 initialBoard(rows,columns){
    let board=[];
    const imageData = this.chooseImages(rows,columns);
    const boardSize = rows*columns;
    for(let index=0;index<boardSize;index  ){
        board[index]={
            id: uuid.v4(),
            imgUrl: imageData[index],
            faceUp: false,
            paired: false
        };
    }
    return board;
}
  

Комментарии:

1. Что показывает журнал ошибок?

2. ничего. он зависал до тех пор, пока chrome не спросит меня, хочу ли я подождать или закрыть страницу

3. Я не знаю, что находится внутри <MemGame> компонента, но я предполагаю, что вы вызываете функцию слишком часто. У вас должна появиться ошибка, подобная этой: превышен максимальный размер стека вызовов . Есть ли у вас привязка this к функциям handleLevelClick и toggleMenu в вашем конструкторе ? Возможно, ваше приложение не находит this , потому что вы его не привязывали

4. Если я удалю {toggleMenu()} из функции {handlelelevelclick}, это не приведет к сбою. Я предполагаю, что что-то не так с изменением строк и столбцов после того, как они были отправлены в качестве реквизитов.

5. Что здесь делает Board компонент? MemGame Ожидаете ли вы целое число? Возможно, он ожидает значения другого типа. Существует множество причин, по которым ваше приложение может аварийно завершать работу, попробуйте разобраться с вашей проблемой, пожалуйста, вам действительно сложно помочь.