Vue实现一个简单的评论系统

上次表示要接着看源码来着,但是看了上次写的post,有点看不懂,真是:talk is cheap,show code please! 暂且用起。

目标是实现一个评论系统。

数据结构

因为还没有学后端,所以先自己实践一个。

import {reactive} from "vue"
const list=reactive([
    {
        name:'xx',
        comment:"xxx",
        like:5,
        child:[
            {
             name:"23",
             comment:"3ef",
             like:0,
             parent_name:'xx',
             child:[...]
            },
            {
             name:"2113",
             comment:"311ef",
             like:0,
             parent_name:'xx',
             child:[]
            },
        ]
    },
    {
        name:'x11x',
        comment:"x1xx",
        like:51,
        child:[]
    }
])

大致如是,一个嵌套的数组,一层数组表示一级评论,一级评论表示对文章的评论,二级评论表示对一级评论的评论,放在一级评论的里面,用child字段表示,并加一个parent_name 的属性,用来指向它的父评论,应该用一个id来表示,但是为了方便,就偷懒用父评论的name了.

当然后端的数据库不会这样表示,这个只是为了用vue的组件方便,因为组件也可以嵌套.对于嵌套的数据结构,我想应该可以用递归把它拍平,具体代码,就坑了吧.

vue实践

一个简单的评论系统起码应该分成两部分,一个用来展示评论,一个用来回复,对应的vue组件的话,展示部分用两个组件,一个负责一级评论,一个负责剩下的级别.因为二者展示的方式不同,如果放在一个组件里面,用组件的自嵌套的话,逻辑比较复杂. 分开成俩后,一个包含嵌套,一个不包含,可能复用性会好一点,当然这些都是我实践完后的想法,当时,肯定是因为实现起来比较复杂.

回复部分就一个组件,虽然对文章的评论与对评论的评论,在数据结构上面不一样,但是复杂度不高,而且这本来就是一个自己编的数据结构,所以…

其他的像时间,点赞数之类的小挂件,在数据结构上添加相应的字段即可,暂且不提.

效果

对文章的评论: 对文章的评论 对评论的评论: 对评论的评论 反手一个赞: 反手一个赞 其实整体部分实践起来不太困难,时间主要花在一个组件间的通讯,props如何使用上.

二就是写模板,写css,调整效果比较麻烦,还好有bootstrap库,

TODO

在截图的时候,发现回复和点赞icon也应该做成响应式的,😄

数据验证功能,又是一个坑…