@AlexKindGeek

Как можно улучшить функцию?

Всем привет. Есть след. код ф-ций
componentDidMount() {
    const id = this.props.packageId;
    const listIndex = this.props.index;
    if (id) {
      getPackagenById("exercises", "packages", id, null, null, null, true).then(
        (data) => {
          const { options, levelsList } = this.getPackageData(data);
          this.setState({ options: options });
          updateCreateQuestionFields(
            levelsList,
            `packageLevelsList[${listIndex}].levelsList`,
          );
        },
      );
    }
  }

  /**
   * Create options and level list data array of package
   * @param  {object} packData
   */
  getPackageData = (packData) => {
    if (!packData.packageLevels) return;
    const options = [];
    const { data } = packData.packageLevels;

    const optionObject = {
      label: packData.title,
      value: packData.id,
      id: packData.id,
    };
    options.push(optionObject);

    const levelsList = data.map(({ title, id }) => ({
      label: title.en,
      value: id,
      id,
    }));

    return {
      options,
      levelsList,
    };


Мне не очень нравится реализация ф-ции getPackageData из-за
const options = [];

    const optionObject = {
      label: packData.title,
      value: packData.id,
      id: packData.id,
    };

    options.push(optionObject);

Возможно ли как-то написать более красивей и короче?
  • Вопрос задан
  • 61 просмотр
Решения вопроса 1
Vlad_IT
@Vlad_IT Куратор тега JavaScript
Front-end разработчик
Что вас именно смутило в этом фрагменте? Пусть он и не короткий, но он понятный. Если так хочется, можете создать класс с конструктором, который будет в аргументах принимать значения
class OptionItem {
   constructor(id, label) {
      this.id = id;
      this.label = label;
      this.value = id;
   }
}
...
const optionObject = new OptionItem(packData.id, packData.title);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@s-jet
Если опции в одном экземпляре - нет смысла возвращать массив значений, пишите в стейт спокойно объект и юзайте его.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы