Отображение многомерных массивов / матриц с помощью - PullRequest
0 голосов
/ 05 сентября 2018

Я недавно запустил React и застрял в проблеме с матрицей. Столбцы и строки считаются входными данными от пользователя и должны отображать матрицу в качестве выходных данных. Вот мой код:

class App extends Component {
  constructor(props){
    super(props);
    this.state = {
      array1 : [],
      array2 : [],
      col1: null,
      row1 : null,

    }
    this.handleCol1Change = this.handleCol1Change.bind(this);
    this.handleRow1Change = this.handleRow1Change.bind(this);
  }

  handleCol1Change(e){
    this.setState({
      col1 : e.target.value
    })
  }

  handleRow1Change(e){
    this.setState({
      row1 : e.target.value
    })
  }

  createarray1(){
    for(let i=0; i < this.state.row1; i++){
      let row = []
      this.state.array1.push(row);
      for(let j=0; j < this.state.col1; j++){
        let col = "1"
        this.state.array1.push(col);
      }
      return this.state.array1
    }
  }

  handleSubmit(){
    this.createarray1()
  }

  render() {
    return (
      <div>
        <h3>Enter Dimensions</h3>
        <form>
          <h1>Matrix 1</h1>
          <input placeholder="Columns" onChange={this.handleCol1Change}/>
          <input placeholder="Rows" onChange={this.handleRow1Change}/>

          <button type="submit" onSubmit={this.handleSubmit.bind(this)}>Enter Dimensions</button>
        </form>
        {console.log("array",this.state.array1,"array2",this.state.array2)}
      </div>
    );
  }
} 

Я считаю, что ошибка в моей логике создания массива. На console.log это показывает, что мой массив ничего не хранит. Есть идеи, что я делаю не так? ТИА

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

У вас есть пара проблем в методе createArray (), вам нужно создать строку и затем добавить ее в массив. Кроме того, как говорит @ageoff, вам нужно звонить setState, а не использовать this.state напрямую. Это ваш код был изменен, чтобы сохранить его как тот, который у вас есть в настоящее время - но он должен работать.

createarray1 теперь просто возвращает массив, а функция handleSubmit устанавливает состояние.

Редактировать : теперь я изменил createarray1, так что это чистая функция, и вы передаете rowCount и colCount. Теперь вы можете проверить, что createarray1 работает независимо:

  createarray1(rowCount, colCount){
    let myarr = [];
    for(let i=0; i < rowCount; i++){
      let row = []
      for(let j=0; j < colCount; j++){
        let col = "1"
        row.push(col);
      }
      myarr.push(row);
    }
    return myarr;
  }

  handleSubmit(){
    this.setState({
      array1: this.createarray1(this.state.row1, this.state.col1)
    });
  }

Вот сама функция, показывающая, что она создает правильный массив:

let createarray1 = function(rowCount, colCount){
  let myarr = [];
  for(let i=0; i < rowCount; i++){
    let row = []
    for(let j=0; j < colCount; j++){
      let col = "1"
      row.push(col);
    }
    myarr.push(row);
  }
  return myarr;
}
console.log(createarray1(2,3));
0 голосов
/ 05 сентября 2018

Вы напрямую изменяете состояние, когда звоните this.state.array1.push. Вы должны использовать setState(). Если вы просто нажимаете на значение состояния, вы можете использовать setState({array1: [...this.state.array1, row]})

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...