#javascript #vue.js #axios #vuex #nuxt.js
#javascript #vue.js #axios #vuex #nuxt.js
Вопрос:
Я относительно новичок в vue.js и особенно нукст. У меня есть небольшая функция для получения данных из серверной части и обновления таблицы. Я не уверен, как отладить эту задачу, поскольку я вызываю это в смонтированном хуке, и я вижу данные на вкладке vuex при загрузке страницы.
payload:Object
count:2
next:null
previous:null
results:Array[2]
0:Object
1:Object
created_at:"2020-09-14T12:00:00Z"
event_name:"wrw"
id:2
market_name:"wrwr"
market_type:"wrwr"
odds:242
runner_name:"wrwr"
side:"wrwrw"
stake:424
По какой-то причине я не могу заполнить таблицу. Я вижу, что функция pollData() вызывается каждые три секунды после загрузки страницы. Я не уверен, почему я не вижу данные в таблице.
Как мне обновить таблицу данными vuex?
<template>
<div id="app">
<h1>Orders</h1>
<table>
<thead class="thead-dark">
<tr>
<th>Time Stamp</th>
<th>Event Name</th>
<th>Market Name</th>
<th>Market Type</th>
<th>Runner Name</th>
<th>Side</th>
<th>Odds</th>
<th>Stake</th>
</tr>
</thead>
<tbody>
<tr v-for="o in polling" :key="o.id">
<td>{{o.created_at}}</td>
<td>{{o.event_name}}</td>
<td>{{o.market_name}}</td>
<td>{{o.market_type}}</td>
<td>{{o.runner_name}}</td>
<td>{{o.side}}</td>
<td>{{o.odds}}</td>
<td>{{o.stake}}</td>
</tr>
</tbody>
</table>
</div>
</template>
<script>
import axios from "axios";
import { mapMutations } from 'vuex'
export default {
data () {
return {
polling: null
}
},
methods: {
pollData () {
this.polling = setInterval(() => {
this.$store.dispatch('getOrders')
}, 3000)
}
},
beforeDestroy () {
clearInterval(this.polling)
},
mounted () {
this.pollData()
}
}
</script>
Комментарии:
1. Ваш шаблон пытается выполнить итерацию
polling
, но для него установлен идентификатор таймера (целое число)pollData()
.2. @tony19 как мне получить данные из функции pollData и перейти к свойству data() для обновления шаблона?
3. Предполагая
getOrders
, что данные извлекаются, сохраните результат в переменной состояния Vuex, затем обновите своюv-for
, чтобы повторить эту переменную состояния.
Ответ №1:
Вы не извлекли данные опроса из своего хранилища.
<script>
import { mapState } from "vuex";
export default {
// remove polling from data object and
computed: {
...mapState({
polling: (state) => state.polling.polling, // Give the correct path.
})
},
created() {
this.pollData();
}
}
</script>
На вашем месте я бы вызвал this.pollData() в созданном хуке.
Комментарии:
1. Я попробовал ваше решение, но, похоже, функция pollData () вызывается чаще, чем каждые три секунды, и у меня также есть ошибка Не удается прочитать свойство «опрос» неопределенного
2. Я только что исправил путь и альт, он сработал. Спасибо, что показали мне, как использовать данные хранилища, подобные этому.
3. У меня есть еще одна проблема с этим кодом, когда я покидаю страницу, опрос все еще продолжается. Вы знаете, как я могу вызвать beforeDestroy?
4. Нет, я не знаю.