programing

오류 메시지."Object/Array 타입의 제안서는 기본값을 반환하기 위해 공장 기능을 사용해야 한다."

prostudy 2022. 5. 12. 21:56
반응형

오류 메시지."Object/Array 타입의 제안서는 기본값을 반환하기 위해 공장 기능을 사용해야 한다."

나는 Vue-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> 

나는 이 오류를 지우는 방법을 알고 싶다.내 질문을 읽어줘서 고마워.

소품에서의 공장 기능은 다음과 같다.

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

또는 ES6에서:

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

('유형 객체/어레이가 있는 경우 기본값을 반환하려면 공장 기능을 사용해야 한다'라는 질문에서 오류에 대한 설명을 찾으려는 사용자)

es6 화살표 함수로 개체를 반환할 때는 괄호가 필요하다는 점에 유의하십시오.() => ({})대신에() => {}

당신의 콘솔 경고에 따르면, 나는 오류를 발견한다.

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;
  }
},

구성 요소 기본값은 공장 기능을 사용하여 반환해야 함!

그것을 시도하고 그것이 당신에게 도움이 되기를 바란다.

이러한 경우에는 객체나 배열이 아닌 기본값을 생성하는 기능보다 기능이 필요하다.

obj_param:{
        type:Object,
        default:()=>({})
},
array_param:{
        type:Array,
        default:()=>[]
},

이는 성능상의 이유로, 필요한 경우에만 함수가 호출되며(값이 없으므로 기본값 사용), 구성 요소를 사용할 때마다 직접 값이 인스턴스화되기 때문이다.

우리 반 구성 요소의 TS 형식에서 나는 그것을 다음과 같이 비슷하게 사용해 왔다.그것으로 나의 실수가 해결되었다.위와 같은 해결책은 트릭카틴카 덕분이다!

@Prop({default(){return []}}) private markerList!: Array<markerType>;

참조URL: https://stackoverflow.com/questions/51958950/error-message-props-with-type-object-array-must-use-a-factory-function-to-retu

반응형