Может ли опора быть реактивной? - PullRequest
0 голосов
/ 17 мая 2018

Я пишу компонент, который получает данные через prop, изменяет эти данные, а затем $emit возвращает их родителю (после его изменения, поэтому он также находится в watched).

Может ли prop быть реактивным? Или, в качестве альтернативы, как назначить опору реактивному свойству?

Я пытался избежать этого вопроса:

  • имеющий props: ["receiveddata"]
  • определение реактивного свойства в data (скажем, hello: '')
  • в mounted() убедитесь, что this.hello = this.receiveddata

Я ожидал, что в этот момент this.hello будет нести контент, введенный receiveddata реквизитом, и с этого момента работать над this.hello (то есть: изменить его, посмотреть и $emit, когда это уместно) )

Однако, глядя на значения в DevTools, я вижу, что

  • this.hello не определено
  • this.receiveddata правильно хранит данные, переданные компоненту

Я заключаю, что когда в mounted() значения реквизита еще не известны (таким образом, undefined из this.receiveddata), это undefined присваивается this.hello, а затем this.receiveddata получает заселено (но для меня уже слишком поздно).

Другими словами, я подключил this.hello = this.receiveddata в неправильном месте, но я не знаю, куда он мог пойти в другом месте (я также пытался изменить mounted() на created())

1 Ответ

0 голосов
/ 17 мая 2018

Возможно, я не понимаю 100%, но я думаю, что это то, что вам нужно.

В этом случае я обычно использую вычисляемое свойство с геттером и сеттером.

props: {
  someProp: String,
},
computed: {
  somePropLocal: {
    get () {
      return this.someProp
    },
    set (value) {
      this.$emit('input', value)
    },
  },
}

Таким образом, вы можете сделать это свободно, и будет выдано правильное значение.

this.somePropLocal = 'Whatever'

Кроме того, somePropLocal будет обновлено, если родитель также изменит его напрямую.

...