Невозможно распространить объект с добавленным babel-plugin-transform-object-rest-spread для установки vue cli 3 - PullRequest
0 голосов
/ 17 октября 2018

Это частичный код, я пытаюсь заставить его работать

const myarr = [
        {a: 'haha',},
        {b: 'yoyo',}
      ];
      const myobj = {
        a: 'some',
        b: 'kind',
      };
      console.log(myarr);
      play(...myobj);
      console.log(props);

Так что у него не будет проблем с расширением массива, но когда я пройду расширение объекта, я получу ошибку

TypeError: Неверная попытка распространить не повторяемый экземпляр

Я добавил babel-plugin-transform-object-rest-spread плагин с настройкой, но такая же ошибка.

Что здесь происходит?

Вот мой репозиторий для воспроизведения: https://github.com/adamchenwei/vue-hoc-playground контрольный файл /src/components/decorator/withCustomComponent.js Код:

export default function withCustomComponent(InnerComponent) {
  return {
    mounted() {
      console.log('withCustomComponent is mounted');
    },
    render() {
      const myarr = [
        {a: 'haha',},
        {b: 'yoyo',}
      ];
      const myobj = {
        a: 'some',
        b: 'kind',
      };
      console.log(myarr);
      play(myobj);
      console.log(props);
      return <InnerComponent
        class="myinner"
        data-event="load"
        />;
    }
  }
}

export const WithCustom = {
  name: 'WithCustom',
  render() {
    const Slott = this.$slots.default[0];
    // return  <Slott />;
    return this.$slots.default[0];
    // return <h1>slott</h1>;
  }
};

function play({a,b}) {
  console.log('play')
  console.log(JSON.stringify(a));
  console.log(`${a} ${b}`);
}

function fakeCall(params, callback) {
  setTimeout(() => {
    callback('https://avatars0.githubusercontent.com/u/6078720?s=200&v=4')
  }, 1000);
}

Документ об операторе распространения для объекта https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax#Spread_in_object_literals

1 Ответ

0 голосов
/ 17 октября 2018

AFAIK, вы не можете использовать оператор распространения для передачи объекта в функцию в качестве аргументов;Одна из причин этого заключается в том, что функция Javascript не имеет встроенной поддержки именованных параметров, что делает невозможным сопоставление параметров по имени;Одним из обходных путей может быть использование синтаксиса деструктурирования в вашей функции play следующим образом:

function play({ a, b }) {
  console.log('play')
  console.log(JSON.stringify(a));
  console.log(`${a} ${b}`);
}

И затем вы можете вызвать его с помощью: play(myobj).

...