Самый простой ответ - data () обрабатывается на стороне клиента, однако раздел asyncData () обрабатывается на стороне сервера при вызове Nuxt () один раз и еще раз на стороне клиента.
Самым большим преимуществом nuxt является его способность отображать контент на стороне сервера.Если вы загружаете контент с помощью обещания на стороне клиента, например, в смонтированном разделе произнесите следующее:
data() {
return {
products: []
}
},
mounted() {
axios.get('/api/v1/products').then(response => {
this.products = response.data
})
}
код javascript отправляется клиенту как есть, и браузер отвечает за выполнение обещаниячтобы получить данные из API.Однако, если вы помещаете обещание в asyncData:
asyncData() {
return axios.get('/api/v1/products').then(response => {
// Note that you can't access the `this` instance inside asyncData
// this.products = response.data
let products = response.data
return { products } // equivalent to { products: products }
})
}
Выборка данных выполняется на стороне сервера, а результат предварительно обрабатывается, а HTML-код с данными (отображаемыми в нем) отправляется клиенту.,Таким образом, в этом случае клиент не будет получать код javascript для самостоятельной обработки вызова API, но вместо этого он получает что-то вроде этого:
<ul>
<li>
<a href="#">Product 1</a>
</li>
<li>
<a href="#">Product 2</a>
</li>
<li>
<a href="#">Product 3</a>
</li>
</ul>
Результат, который мы возвращаем из asyncData, объединяется с тем, чтов данных.Он не заменен, а объединен.