Сообщение об ошибке. "Реквизит с типом Object/Array должен использовать заводскую функцию для возврата значения по умолчанию."


Сообщение об ошибке. "Реквизит с типом Object/Array должен использовать заводскую функцию для возврата значения по умолчанию."

22.08.2018 05:05:09 Просмотров 46 Источник

Я использую Вью-Cli3.0. Я использовал этот модуль для Vue.js. https://github.com/holiber/sl-vue-tree

Это настраиваемый перетаскиваемый компонент дерева для Vue.js но я обнаружил, что он не может копировать функции объекта.

https://github.com/holiber/sl-vue-tree/blob/master/src/sl-vue-tree.js#L715

Из-за этого.

JSON.parse(JSON.stringify(entity))

Поэтому я использовал этот модуль и отредактировал функцию копирования.

https://www.npmjs.com/package/clone

var clone = require('clone');

copy(entity) {
    return clone(entity)
},

Таким образом, функция объекта копируется правильно.

Я уже проверил его, и он работал правильно. С производительностью проблем не было, но я получил консольную ошибку.

[Vue warn]: Invalid default value for prop "multiselectKey": Props with type Object/Array must use a factory function to return the default value.

found in

---> <SlVueTree> 

Я хочу знать, как стереть эту ошибку. Спасибо, что прочитали мой вопрос.

У вопроса есть решение - Посмотреть?

Ответы - Сообщение об ошибке. "Реквизит с типом Object/Array должен использовать заводскую функцию для возврата значения по умолчанию." / Error message. "Props with type Object/Array must use a factory function to return the default value."

Является ответом!
Trick

22.08.2018 05:20:45

согласно вашему консольному предупреждению, я нахожу ошибку

https://github.com/holiber/sl-vue-tree/blob/master/src/sl-vue-tree.js#L30

попробуйте исправить это вот так:

multiselectKey: {
  type: [String, Array],
  default: function () {
    return ['ctrlKey', 'metaKey']
  },
  validator: function (value) {
    let allowedKeys = ['ctrlKey', 'metaKey', 'altKey'];
    let multiselectKeys = Array.isArray(value) ? value : [value];
    multiselectKeys = multiselectKeys.filter(keyName => allowedKeys.indexOf(keyName ) !== -1);
    return !!multiselectKeys.length;
  }
},

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

попробуйте и надейтесь, что это вам поможет

Katinka Hesselink

25.09.2019 11:34:54

Фабричная функция в реквизите выглядит следующим образом:

props: {
    exampleDefaultObject: {
        type: Object,
        default() {
            return {}
        }
    },
    exampleDefaultArray: {
        type: Array,
        default() {
            return []
        }
    }
},

или в ES6:

props: {
    exampleDefaultObject: {
        type: Object,
        default: () => ({})
    },
    exampleDefaultArray: {
        type: Array,
        default: () => []
    }
},

(для людей, которые приходят сюда в поисках объяснения ошибки в вопросе "реквизит с типом object/array должен использовать заводскую функцию для возврата значения по умолчанию")

Обратите внимание, что при возврате объекта в функции стрелки es6 вам понадобятся круглые скобки: () => ({}) вместо () => {}

Yogesh Vadekar

15.10.2020 10:12:17

В формате TS в моем компоненте класса я использовал его аналогично следующим образом. Это решило мою ошибку. Спасибо Trick & Katinka за решение выше!

@Prop({default(){return []}}) private markerList!: Array<markerType>;
Помочь в развитии проекта:
Закрыть X