如何用axios的结果更新Vue列表?

发布于 2022-09-07 16:49:15 字数 2032 浏览 10 评论 0

现在有一个字符串和一个列表要用axios中取到的结果更新,更新列表的时候有几个本地值要先显示,然后axios取到的结果添加到列表的后面,我研究了大半天,只找到把更新函数全加到created钩子中这么一种方法,请教一下大佬们是否有其他更好的办法来更新数据。

<html>

<head>
    <title>index</title>
    <meta charset="utf8">
</head>

<body>
    <div id="app">
        <h1>{{greeting}}</h1>
        <ul>
            <li v-for="item in items">
                {{item}}
            </li>
        </ul>
    </div>
    <script src="https://unpkg.com/vue/dist/vue.js"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script>
        let vm = new Vue({
            el: '#app',
            data() {
                return {
                    greeting: '',
                    items: []
                }

            },
            computed: {

            },
            methods: {
                update_greeting: function () {
                    axios.get('https://httpbin.org/ip')
                        .then(resp => {
                            this.greeting = 'hello'
                            console.log('greeting updated')

                        })
                        .catch(err => console.error(err))
                },
                update_items: function () {
                    this.items = [1, 2, 3]
                    axios.get('https://httpbin.org/ip')
                        .then(resp => {
                            this.items.push(4)
                            console.log('items updated')

                        })
                        .catch(err => console.error(err))
                },
            },
            created: function () {
                this.update_greeting()
                this.update_items()
            }
        })
    </script>
</body>

</html>

我还试过一种逗比办法是把初始值放到data中,然后在计算属性中更新data,这样虽然倒是可以更新,但是至少更新两次,而且一不小心就死循环了,想来想去好像除了created钩子外没有什么好办法。请问大佬们在这种情况下都是怎么做的?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

ゃ懵逼小萝莉 2022-09-14 16:49:15

data() {} 中直接给 items 赋值为 [1,2,3] 不就好了?

乱世争霸 2022-09-14 16:49:15

我也是这样处理的,把执行函数放在created里面,我觉得这种方法还好啊,你可以用async和await,这样效果会更好。可以把请求单独放在一个api文件,然后在引入那两个函数这样方便管理

埋情葬爱 2022-09-14 16:49:15

为什么要说把值放到data里很逗比呢,原本就应该这么初始化。

<html>

<head>
    <title>index</title>
    <meta charset="utf8">
</head>

<body>
    <div id="app">
        <h1>{{greeting}}</h1>
        <ul>
            <li v-for="item in items">
                {{item}}
            </li>
        </ul>
    </div>
    <script src="https://unpkg.com/vue/dist/vue.js"></script>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script>
        let vm = new Vue({
            el: '#app',
            data() {
                return {
                    greeting: 'normal',
                    items: [1, 2, 3]
                }

            },
            computed: {

            },
            methods: {
                update_greeting: function () {
                    axios.get('https://httpbin.org/ip')
                        .then(resp => {
                            this.greeting = 'hello'
                            console.log('greeting updated')

                        })
                        .catch(err => console.error(err))
                },
                update_items: function () {
                    axios.get('https://httpbin.org/ip')
                        .then(resp => {
                            this.items.push(4)
                            console.log('items updated')

                        })
                        .catch(err => console.error(err))
                },
            },
            created: function () {
                this.update_greeting()
                this.update_items()
            }
        })
    </script>
</body>

</html>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文