консоль показывает, что массивы в состоянии заполнены, но я не могу получить доступ к объекту [0] - PullRequest

1 Ответ

0 голосов
/ 05 декабря 2018

Вы пытались инициализировать свое состояние в методе класса constructor?Таким образом, состояние класса будет инициализировано со значениями по умолчанию перед первой попыткой рендеринга:

class Home extends Component {
    constructor(props) {
        super(props);
        this.state = {
            allEvents: [],
            allArtists: []
        };
    }

    ...
    ...
}

Также я согласен с комментарием Джорджа Чантуридзе об использовании метода жизненного цикла componentDidMount вместо componentWillMount.

ОБНОВЛЕНИЕ: Добавлен фрагмент в неудачной попытке воспроизвести проблему

class App extends React.Component {
  state = {
    concatArray: [],
    es6Array: [],
    pushArray: []
  };

  componentWillMount = () => {
    var concat = this.state.concatArray.concat({
      name: "A_concat",
      value: 1
    }).concat({
      name: "B_concat",
      value: 2
    });
    this.state.pushArray.push({
      name: "C_push",
      value: 3
    });
    this.state.pushArray.push({
      name: "D_push",
      value: 4
    });
    this.setState({
      concatArray: concat,
      es6Array: { ...this.state.es6Array,
        ...[{
          name: "E_es6",
          value: 5
        }, {
          name: "F_es6",
          value: 7
        }]
      }
    });
  };

  render = () => {
    console.clear();
    console.log(this.state);
    console.log(this.state.concatArray);
    console.log(this.state.concatArray[0]);
    console.log(this.state.pushArray);
    console.log(this.state.pushArray[0]);
    console.log(this.state.es6Array);
    console.log(this.state.es6Array[0]);
    return null;
  };
}

const rootElement = document.getElementById("root");
ReactDOM.render( < App / > , rootElement);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...