Генерация неповторяющихся элементов в componentDidMount с использованием Redux - PullRequest
0 голосов
/ 17 декабря 2018

Я создаю многостраничное приложение.Когда пользователь переходит на одну из моих страниц, запускается componentDidMount и в настоящий момент генерирует 4 случайных числа в указанном мною диапазоне и отправляет их через мой редуктор.Это в конечном итоге возвращается в виде массива.

В пределах componentDidMount У меня есть цикл для вызова моей функции generateRandomNumber четыре раза.Однако, если я пойду в лог выходного массива, я получу пустой массив, который является начальным состоянием для указанного редуктора.

Запись массива в componentDidUpdate или в любом месте после монтирования возвращает то, что я хочу, но это не помогает мне проверять дубликаты, так как я не могу проверять дубликаты, если проверяю пустой массив,Все должно быть без задержки, но, похоже, есть проблема с попыткой чтения из this.props.currentUserList из componentDidMount.

Мне нужно убедиться, что я не добавляю двух одинаковых пользователей в свой массив, но мне нужна предварительная проверка, чтобы все было сделано к тому времени, когда это появится на экране.

//gives me a random user from my array
generateRandomUser() {
  return myArray[Math.floor(Math.random() * 100) + 1]
}

//sends 4 randomUsers through my actions to my reducers
generateNewID() {
  let amountOfOptions = 4;

  while (amountOfOptions > 0) {
    let randomUser = this.generateRandomUser();

    if (this.props.currentUserList.length === 0) {
      this.props.setCurrentUser(randomUser);
    } else {
      //this never fires as currentUserList is somehow still == []
      this.checkForDuplicates();
    }

    amountOfOptions--;
  }
}

componentDidMount() {
  this.generateNewID()


  console.log(this.props.currentUserList)
  //returns []
}

componentDidUpdate() {

  console.log(this.props.currentUserList)
  // returns [
  //   user2: {
  //    name: 'name'
  //   },
  //   user4: {
  //    name: 'name'
  //   },
  //   user28: {
  //    name: 'name'
  //   },
  //   user92: {
  //    name: 'name'
  //   }, 
  // ]
}

1 Ответ

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

Я не уверен насчет реализации массива.Однако, если требуется получить 4 случайных пользователя, вместо того, чтобы 4 раза вызывать setcurrentuser, вы можете сгенерировать 4 пользователей и установить их сразу.

generateNewID() {
  let amountOfOptions = 4;
  let randomUserList = [];
  while (amountOfOptions > 0) {
    let randomUser = this.generateRandomUser();
    if (randomUserList.length === 0) {
      randomUserList.push(randomUser);
    } else {
      //this never fires as currentUserList is somehow still == []
      this.checkForDuplicates();
    }
    amountOfOptions--;
  }
  this.setCurrentUser(randomUserList);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...