Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何添加显示而不在VueJS中重新渲染整个组件_Javascript_Php_Laravel_Vue.js - Fatal编程技术网

Javascript 如何添加显示而不在VueJS中重新渲染整个组件

Javascript 如何添加显示而不在VueJS中重新渲染整个组件,javascript,php,laravel,vue.js,Javascript,Php,Laravel,Vue.js,我刚接触过拉威尔和Vuejs。我有一个问题,当点击“加载更多”按钮或向下滚动到底部时,整个组件都在重新渲染。按钮或滚动条的作用就像分页一样,但您所能做的就是加载更多或添加更多的显示。我的问题是如何在不重新渲染整个组件的情况下渲染新显示 我试着创建一个变量,其中它将传递将显示多少分页。是的,它完成了工作,但是组件正在重新呈现,来自服务器的回复的大小越来越大 以下是我在Vue组件上的脚本: <script> export default { props: ['user','rev

我刚接触过拉威尔和Vuejs。我有一个问题,当点击“加载更多”按钮或向下滚动到底部时,整个组件都在重新渲染。按钮或滚动条的作用就像分页一样,但您所能做的就是加载更多或添加更多的显示。我的问题是如何在不重新渲染整个组件的情况下渲染新显示

我试着创建一个变量,其中它将传递将显示多少分页。是的,它完成了工作,但是组件正在重新呈现,来自服务器的回复的大小越来越大

以下是我在Vue组件上的脚本:

<script>
export default {
    props: ['user','review_count'],
    data(){
        return{
            reviews: {},
            limit: 2,
            scrolledToBottom: false,
        }
    },
    created(){
        this.getReviews();
        this.scroll();
    },
    methods: {
        getReviews: function(page){
            axios.get('/datas/reviews?user='+ this.user + '&limit='+ this.limit)
            .then((response) =>{
                this.reviews = response.data.data;
            })
            .catch(()=>{
            });
        },
        countType: function(data, type) {
            return data.filter(function(value) { return value.type === type }).length;
        },
        loadMore: function(){
            this.limit+=6;
            this.getReviews();
        },
        scroll () {
            window.onscroll = () => {
                let bottomOfWindow = Math.max(window.pageYOffset, document.documentElement.scrollTop, document.body.scrollTop) + window.innerHeight === document.documentElement.offsetHeight
                if (bottomOfWindow&&this.review_count>this.limit) {
                    this.loadMore();
                }
            }
        }
    }
}
</script>

在我看来,你需要做两件事

1/为了避免每次都增加限制,您应该研究在服务器上分页您的结果,这样您就可以从服务器请求下一页。现在,在每次连续呼叫中,您都会再次获取您已经拥有的内容,这将消除您减少服务器压力的目标

2/在客户端代码中,显然您也需要支持分页,但也要确保在循环元素上正确设置密钥。VueJS使用该键确定是否应在循环中重新渲染该特定元素


让我知道这是否有帮助

在我看来,你需要做两件事

1/为了避免每次都增加限制,您应该研究在服务器上分页您的结果,这样您就可以从服务器请求下一页。现在,在每次连续呼叫中,您都会再次获取您已经拥有的内容,这将消除您减少服务器压力的目标

2/在客户端代码中,显然您也需要支持分页,但也要确保在循环元素上正确设置密钥。VueJS使用该键确定是否应在循环中重新渲染该特定元素


让我知道这是否有帮助

我刚刚解决了自己的问题,解决方法是使用分页。每次对象向下滚动时,我都会将服务器中的所有数据推送到对象中

以下是我的向下滚动代码:

scroll () {
            window.onscroll = () => {
                let bottomOfWindow = Math.max(window.pageYOffset, document.documentElement.scrollTop, document.body.scrollTop) + window.innerHeight === document.documentElement.offsetHeight
                if (bottomOfWindow&&this.review_count>this.reviews.length) {
                this.getReviews();
                }
            }
        }
以下是我的getReviews()代码:


我想出了这个主意,这样我就不会再使用分页来查看下一篇文章了。它更像是一个无限滚动分页组件。

我刚刚解决了我自己的问题,解决方案是使用分页。每次对象向下滚动时,我都会将服务器中的所有数据推送到对象中

以下是我的向下滚动代码:

scroll () {
            window.onscroll = () => {
                let bottomOfWindow = Math.max(window.pageYOffset, document.documentElement.scrollTop, document.body.scrollTop) + window.innerHeight === document.documentElement.offsetHeight
                if (bottomOfWindow&&this.review_count>this.reviews.length) {
                this.getReviews();
                }
            }
        }
以下是我的getReviews()代码:


我想出了这个主意,这样我就不会再使用分页来查看下一篇文章了。它更像是一个无限滚动分页组件。

您所说的“不重新渲染整个组件”是什么意思?你能分享一下组件模板吗?它可以帮助我获得更多的上下文。我想做的只是像一个社交媒体墙类型的组件,它将只添加一个新的显示,而不是只重新渲染整个组件,只添加新的显示你所说的“不重新渲染整个组件”是什么意思?你能分享一下组件模板吗?它可以帮助我获得更多的上下文。我想做的只是像一个社交媒体墙类型的组件,它将只添加一个新的显示,而不是仅仅重新渲染整个组件来添加新的显示谢谢你的意见先生,我已经想出了一个解决方案,就像你的第一个意见一样。谢谢你的意见先生,我已经想出了一个解决办法,就像你的第一个意见一样。
getReviews: function(){
            let vm = this;
            axios.get('/datas/reviews?user='+ this.user + '&page='+ this.page)
            .then((response) =>{
                $.each(response.data.data, function(key, value) {
                                vm.reviews.push(value);
                                console.log((vm.reviews));
                        });
            })
            .catch(()=>{
            });
            this.page+=1;
        },