React实现评论的添加和删除


Posted in Javascript onOctober 20, 2020

本文实例为大家分享了React实现评论添加和删除的具体代码,供大家参考,具体内容如下

一、效果图

React实现评论的添加和删除

React实现评论的添加和删除

React实现评论的添加和删除

React实现评论的添加和删除

二、需求描述

1. 手动输入用户名和评论内容,点击提交;输入内容被追加到右侧评论列表;

2.  点击评论列表的“删除”按钮,弹框提示确定删除用户“xx”;

3. 点击“确定”,“xx”用户发表的评论被删除;

4. 所有评论均被删除时,显示“暂无评论,点击添加评论!!!”

三、代码实现

App.js

import React from 'react';
import './App.css';
import CommentAdd from '../src/components/CommentAdd'
import CommentList from '../src/components/CommentList'
import PropTypes from 'prop-types'
import "../src/assets/css/bootstrap.css"
 
class App extends React.Component {
 // 给组件对象指定state属性
 // 初始化状态
 state = {
 comments: [
  {username: "Tom", content: "React太容易了"},
  {username: "Jack", content: "React太难了"}
 ]
 }
 
 static propTypes = {
 comments: PropTypes.array.isRequired,
 addComment: PropTypes.func.isRequired,
 deleteComment: PropTypes.func.isRequired
 }
 
 addComment = (comment) => {
 // 将添加的评论追加到评论list上
 const {comments} = this.state
 comments.unshift(comment)
 // 更新状态
 this.setState({comments})
 }
 deleteComment = (index) => {
 const {comments} = this.state
 comments.splice(index, 1)
 this.setState({comments})
 }
 
 render() {
 const {comments} = this.state
 return (
  <div>
  <header className="site-header jumbotron">
   <div className="container">
   <div className="row">
    <div className="col-xs-12">
    <h2>评论管理列表</h2>
    </div>
   </div>
   </div>
  </header>
  <div className="container">
   <CommentAdd addComment={this.addComment}/>
   <CommentList comments={comments} deleteComment={this.deleteComment}/>
  </div>
  </div>
 );
 }
}
 
export default App;

CommentAdd.js

import React, {Component} from 'react';
import PropTypes from 'prop-types'
import "../assets/css/bootstrap.css"
 
class CommentAdd extends Component {
 
 state = {
 username: "",
 content: ""
 }
 
 static propTypes = {
 addComment: PropTypes.func.isRequired
 }
 handleNameChange = (event) => {
 const username = event.target.value
 this.setState({username});
 }
 handleContentChange = (event) => {
 const content = event.target.value
 this.setState({content});
 }
 handleSubmit = () => {
 const comment = this.state
 this.props.addComment(comment)
 // 清楚输入数据
 this.setState({
  username: "",
  content: ""
 });
 }
 
 render() {
 const {username, content} = this.props
 return (
  <div className="col-md-4">
  <form className="form-horizontal">
   <div className="form-group">
   <label>用户名:</label>
   <input type="text" className="form-control" placeholder="请输入用户名" value={username}
    onChange={this.handleNameChange}/><br/>
   </div>
   <div className="form-group">
   <label>评论内容:</label>
   <textarea className="form-control" rows="6" placeholder="请输入评论内容"
     value={content} onChange={this.handleContentChange}>
   </textarea>
   </div>
   <div className="form-group">
   <div className="col-sm-offset-2 col-sm-10">
    <button type="button" className="btn btn-default pull-right"
     onClick={this.handleSubmit}>提交
    </button>
   </div>
   </div>
  </form>
  </div>
 );
 }
}
 
export default CommentAdd;

CommentList.js

import React, {Component} from 'react';
import CommentItem from "./CommentItem";
import PropTypes from 'prop-types'
import "../assets/css/comment_list.css"
 
class CommentList extends Component {
 
 static propTypes = {
 comments: PropTypes.array.isRequired,
 deleteComment: PropTypes.func.isRequired
 }
 
 render() {
 const {comments, deleteComment} = this.props
 const display = comments.length === 0 ? "block" : "none"
 return (
 
  <div className="col-md-8">
  <h4>评论回复:</h4>
  <h5 style={{display}}>暂无评论,点击添加评论!!!</h5>
  <ul>
   {
   comments.map((comment, index) => <li key={index}><CommentItem comments={comment} index={index}
           deleteComment={deleteComment}/>
   </li>)
   }
  </ul>
  </div>
 );
 }
}
 
export default CommentList;

CommentItem.js

import React, {Component} from 'react';
import PropTypes from 'prop-types'
import "../assets/css/comment_item.css"
 
class CommentItem extends Component {
 static propTypes = {
 comments: PropTypes.array.isRequired,
 deleteComment: PropTypes.func.isRequired,
 index: PropTypes.number.isRequired
 }
 
 handleDeleteComment = () => {
 const {comments, deleteComment, index} = this.props
 if (window.confirm(`确定删除${comments.username}嘛?`)) {
  deleteComment(index)
 }
 }
 
 render() {
 const {comments} = this.props
 return (
  <div className="list-group-item">
  <div className="handle">
   <a href="javascript:;" rel="external nofollow" onClick={this.handleDeleteComment}>删除</a>
  </div>
  <p className="user"><span>{comments.username}</span><span>说:</span></p>
  <p className="centence">{comments.content}</p>
  </div>
 );
 }
}
 
export default CommentItem;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS处理VBArray的函数使用说明
May 11 Javascript
基于jquery1.4.2的仿flash超炫焦点图播放效果
Apr 20 Javascript
jqgrid 简单学习笔记
May 03 Javascript
左侧是表头的JS表格控件(自写,网上没有的)
Jun 04 Javascript
仿百度输入框智能提示的js代码
Aug 22 Javascript
Jquery基础教程之DOM操作
Aug 19 Javascript
jquery基础知识第一讲之认识jquery
Mar 17 Javascript
JavaScript ES5标准中新增的Array方法
Jun 28 Javascript
JavaScript之underscore_动力节点Java学院整理
Jul 03 Javascript
react项目如何使用iconfont的方法步骤
Mar 13 Javascript
详解jquery和vue对比
Apr 16 jQuery
Vue(定时器)解决mounted不能获取到data中的数据问题
Jul 30 Javascript
基于JavaScript实现简单抽奖功能代码实例
Oct 20 #Javascript
微信小程序使用前置摄像头拍照
Oct 22 #Javascript
jQuery实现可以计算进制转换的计算器
Oct 19 #jQuery
jQuery实现计算器功能
Oct 19 #jQuery
vue3为什么要用proxy替代defineProperty
Oct 19 #Javascript
jQuery实现推拉门效果
Oct 19 #jQuery
小程序实现左滑删除的效果的实例代码
Oct 19 #Javascript
You might like
追忆往昔!浅谈收音机的百年发展历史
2021/03/01 无线电
php下使用无限生命期Session的方法
2007/03/16 PHP
PHP中MD5函数使用实例代码
2008/06/07 PHP
PHP采用curl模仿用户登陆新浪微博发微博的方法
2014/11/07 PHP
Yii2框架制作RESTful风格的API快速入门教程
2016/11/08 PHP
PHP实现的简单异常处理类示例
2017/05/04 PHP
PHP chop()函数讲解
2019/02/11 PHP
Laravel 自动转换长整型雪花 ID 为字符串的实现
2020/10/27 PHP
JavaScript初学者应注意的七个细节小结
2012/01/30 Javascript
浅析四种常见的Javascript声明循环变量的书写方式
2015/10/14 Javascript
javascript html5实现表单验证
2016/03/01 Javascript
即将发布的jQuery 3 有哪些新特性
2016/04/14 Javascript
JS实现双击内容变为可编辑状态
2017/03/03 Javascript
react实现pure render时bind(this)隐患需注意!
2017/03/09 Javascript
Vue.JS项目中5个经典Vuex插件
2017/11/28 Javascript
关于element-ui的隐藏组件el-scrollbar的使用
2019/05/29 Javascript
jQuery中DOM常见操作实例小结
2019/08/01 jQuery
详解vue-router 动态路由下子页面多页共活的解决方案
2019/12/22 Javascript
Vue 组件复用多次自定义参数操作
2020/07/27 Javascript
JavaScript实现动态生成表格
2020/08/02 Javascript
Python实现学校管理系统
2018/01/11 Python
使用pandas中的DataFrame数据绘制柱状图的方法
2018/04/10 Python
对python操作kafka写入json数据的简单demo分享
2018/12/27 Python
详解用python自制微信机器人,定时发送天气预报
2019/03/25 Python
Python 二叉树的层序建立与三种遍历实现详解
2019/07/29 Python
pyCharm 设置调试输出窗口中文显示方式(字符码转换)
2020/06/09 Python
python中delattr删除对象方法的代码分析
2020/12/15 Python
资生堂美国官网:Shiseido美国
2016/09/02 全球购物
Tessabit日本:集世界奢侈品和设计师品牌的意大利精品买手店
2020/01/07 全球购物
PHP面试题附答案
2015/11/28 面试题
教师党员思想汇报
2014/01/06 职场文书
学校元旦晚会方案
2014/02/19 职场文书
国际经济与贸易专业大学生职业规划书
2014/03/01 职场文书
活动总结格式范文
2014/04/26 职场文书
开展党的群众路线教育实践活动工作总结
2014/11/05 职场文书
JVM之方法返回地址详解
2022/02/28 Java/Android