#javascript #vue.js #vue-props
Вопрос:
Это мой код в родительском компоненте:
lt;div v-for="measurement in measurements" :key="measurement.id" gt; lt;graph-component :value="valueOfMeasurement(measurement)" gt;lt;/graph-componentgt; lt;/divgt;
Я отправляю реквизиты value
дочернему компоненту graph-component
. :value
должен отправить массив graph-component
, но я получаю ошибку You may have an infinite update loop in a component render function.
.
Метод valueOfMeasurement(measurement)
заключается в:
methods:{ valueOfMeasurement(measurement) { this.arrayOfValues.length=0; this.counter=0; for( this.counter;this.counterlt;this.message.feeds.length;this.counter ) { this.arrayOfValues.push(this.message.feeds[this.counter]["field" measurement.fieldId]); } return this.arrayOfValues; } }
Я новичок в Vue.js и я предполагаю, что получаю эту ошибку, потому что я помещаю новые элементы в массив, но я не могу найти другого способа сделать это.
Ответ №1:
Вы получаете возможный бесконечный цикл, потому что вы изменяете состояние во время рендеринга. В частности, вы вызываете valueOfMeasurement
метод во время визуализации (т. Е. в шаблоне), который изменяет состояние компонента ( this.arrayOfValues
и this.counter
). Это вызовет повторную визуализацию Vue, которая затем снова изменит состояние и так далее бесконечно.
Почему arrayOfValues
и counter
местное государство? Вы просто очищаете их каждый раз, когда вызывается метод, так что, похоже, они должны быть просто локальными переменными внутри метода. Но… это зависит от lt;graph-componentgt;
того, изменяет ли эти массивы; если это так, вам следует заранее вычислить все эти данные вне шаблона, возможно, при measurements
первом наборе или в created
крючке и т. Д.
Комментарии:
1. Это оно. Я неправильно понял, что мне нужно объявить это в данных, чтобы это не дало мне бесконечный цикл.