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 相关文章推荐
List all the Databases on a SQL Server
Jun 21 Javascript
幻灯片带网页设计中的20个奇妙应用示例小结
May 27 Javascript
JS小功能(setInterval实现图片效果显示时间)实例代码
Nov 28 Javascript
带左右箭头图片轮播的JS代码
Dec 18 Javascript
改变隐藏的input中value值的方法
Mar 19 Javascript
jQuery遍历DOM元素与节点方法详解
Apr 14 Javascript
JS中Object对象的原型概念基础
Jan 29 Javascript
详解Nuxt.js 实战集锦
Nov 19 Javascript
vue 实现LED数字时钟效果(开箱即用)
Dec 08 Javascript
vue实现匀速轮播效果
Jun 29 Javascript
js实现tab栏切换效果
Aug 02 Javascript
JS实现小米轮播图
Sep 21 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
YB217、YB235、YB400浅听
2021/03/02 无线电
php中的抽象方法和抽象类
2017/02/14 PHP
浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)
2017/03/14 PHP
有关PHP 中 config.m4 的探索
2020/08/26 PHP
一种JavaScript的设计模式
2006/11/22 Javascript
jQuery EasyUI API 中文文档 - Menu菜单
2011/10/03 Javascript
javascript学习笔记(二十) 获得和设置元素的特性(属性)
2012/06/20 Javascript
公共js在页面底部加载的注意事项介绍
2013/07/18 Javascript
select多选 multiple的使用示例
2014/06/16 Javascript
JavaScript中的对象与JSON
2015/07/03 Javascript
javascript HTML+CSS实现经典橙色导航菜单
2016/02/16 Javascript
js 定位到某个锚点的方法
2016/11/19 Javascript
AngularJS表格添加序号的方法
2017/03/03 Javascript
JavaScript实现的搜索及高亮显示功能示例
2017/08/14 Javascript
详解Vue单元测试Karma+Mocha学习笔记
2018/01/31 Javascript
解决Vue打包上线之后部分CSS不生效的问题
2019/11/12 Javascript
[01:13:51]TNC vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python ElementTree 基本读操作示例
2009/04/09 Python
Python 正则表达式的高级用法
2016/12/04 Python
Python实现的微信公众号群发图片与文本消息功能实例详解
2017/06/30 Python
python3.6连接MySQL和表的创建与删除实例代码
2017/12/28 Python
Python中列表与元组的乘法操作示例
2018/02/10 Python
tensorflow实现softma识别MNIST
2018/03/12 Python
django如何自己创建一个中间件
2019/07/24 Python
python实现KNN分类算法
2019/10/16 Python
python安装读取grib库总结(推荐)
2020/06/24 Python
Python 求向量的余弦值操作
2021/03/04 Python
国外最大的眼镜网站:Coastal
2017/08/09 全球购物
Diptyque英国官方网站:源自法国的知名香氛品牌
2019/08/28 全球购物
Currentbody西班牙:美容仪专家
2019/09/28 全球购物
如何向接受结构参数的函数传入常数值
2016/02/17 面试题
企业演讲比赛主持词
2014/03/18 职场文书
企业群众路线教育实践活动心得体会
2014/11/03 职场文书
军训阅兵新闻稿
2015/07/17 职场文书
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
2022/04/11 Python
Python如何将list中的string转换为int
2022/07/15 Ruby