@melishev

Как правильно передать полученные данные из Computed в Vue?

Есть функция в Computed:
SendData() {
            let FormData = this.AddProduct

                let Inputs = FormData.Inputs.reduce( (acc, cur ) => {
                    acc[cur.Alias] = cur.Data
                    return acc
                }, {})

                let Quill = FormData.Quill.reduce( (acc, cur ) => {
                    acc[cur.Alias] = cur.Data
                    return acc
                }, {})

            let OptionsData = this.Options

                let OptionsObjects = OptionsData.reduce( (acc, cur ) => {
                    acc[cur.AliasSingle] = cur.Data
                    return acc
                }, {})

            let Objects = Object.assign(Inputs, Quill)

                Objects.Options = OptionsObjects
                
                // Генерируем все возможные вариации продукта

                    const OptionsKeys = Object.keys(OptionsObjects)
                    const OptionsValues = Object.values(OptionsObjects)

                    const OptionsAliasSets = getCartesianProduct(
                        OptionsValues.map(options => options.map(({ Alias }) => Alias))
                    );
                    const OptionsNameSets = getCartesianProduct(
                        OptionsValues.map(options => options.map(({ Name }) => Name))
                    );

                    const VariationsArray = OptionsAliasSets.map(
                        (set, index) => Object.fromEntries([
                            ['VendorCode', `${Objects.VendorCode}.${set.join('.')}`],
                            ...OptionsKeys.map((name, i) => [name, OptionsNameSets[index][i]]),
                        ])
                    );

                    function getCartesianProduct(sets) {
                        const result = []

                        function cartesianProduct(sets, index, current) {
                            if (index === sets.length) {
                                result.push(current.slice());
                                return;
                            }
                            for (let i = 0; i < sets[index].length; i++) {
                                current[index] = sets[index][i];
                                cartesianProduct(sets, index + 1, current);
                            }
                        }

                        cartesianProduct(sets, 0, []);
                        return result;
                    }
                    
                    // Добавляем все вариации продукта в общий объект
                    Objects.Variations = VariationsArray

            return Objects
        }
    },

Она получает другие данные из хранилища, подтягиваемые другими функциями Computed.
Я пытаюсь передать полученные данные из SendData в компонент через Props, но получаю такую ошибку
Cannot read property 'Inputs' of undefined
В данном фрагменте
let Inputs = FormData.Inputs.reduce( (acc, cur ) => {
                    acc[cur.Alias] = cur.Data
                    return acc
                }, {})

Какие есть способы решения данной проблемы? И как это можно прокинуть не через Props а допустим выкинуть в Vuex
  • Вопрос задан
  • 108 просмотров
Решения вопроса 1
MrDecoy
@MrDecoy Куратор тега JavaScript
Верставший фронтендер
Ну значит у Вас в FormData нет свойства Inputs.
let FormData = this.AddProduct  // --> this.AddProducts не содержит свойства Inputs

Более того, похоже и FormData - undefined.
То есть this.AddProducts - undefined
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы