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定时器设定时间执行动作
Apr 02 Javascript
js 控制页面跳转的5种方法
Sep 09 Javascript
jQuery的attr与prop使用介绍
Oct 10 Javascript
jquery获取复选框被选中的值
Apr 10 Javascript
纯HTML5制作围住神经猫游戏-附源码下载
Aug 23 Javascript
JS简单判断函数是否存在的方法
Feb 13 Javascript
使用bat打开多个cmd窗口执行gulp、node
Feb 17 Javascript
详谈Angular 2+ 的表单(一)之模板驱动型表单
Apr 25 Javascript
VUE + UEditor 单图片跨域上传功能的实现方法
Feb 08 Javascript
vue-router beforeEach跳转路由验证用户登录状态
Dec 26 Javascript
atom-design(Vue.js移动端组件库)手势组件使用教程
May 16 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
Dec 25 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
php 随机记录mysql rand()造成CPU 100%的解决办法
2010/05/18 PHP
Session保存到数据库的php类分享
2011/10/24 PHP
PHP对XML内容进行修改和删除实例代码
2016/10/26 PHP
php中简单的对称加密算法实现
2017/01/05 PHP
PHP常见加密函数用法示例【crypt与md5】
2019/01/27 PHP
网站导致浏览器崩溃的原因总结(多款浏览器) 推荐
2010/04/15 Javascript
javascript中怎么做对象的类型判断
2013/11/11 Javascript
javascript Array.prototype.slice的使用示例
2013/11/14 Javascript
使用js实现按钮控制文本框加1减1应用于小时+分钟
2013/12/09 Javascript
JQuery右键菜单插件ContextMenu使用指南
2014/12/19 Javascript
JavaScript获取浏览器信息的方法
2015/11/20 Javascript
AngularJS入门教程之Select(选择框)详解
2016/07/27 Javascript
AngularJS包括详解及示例代码
2016/08/17 Javascript
nodeJs内存泄漏问题详解
2016/09/05 NodeJs
Vue.js进行查询操作的实例详解
2017/08/25 Javascript
详解webpack性能优化——DLL
2017/10/20 Javascript
postman+json+springmvc测试批量添加实例
2018/03/31 Javascript
vue缓存的keepalive页面刷新数据的方法
2019/04/23 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
2019/12/25 Javascript
vue 查看dist文件里的结构(多种方式)
2020/01/17 Javascript
es6数组的flat(),flatMap()函数用法实例分析
2020/04/18 Javascript
vue 解决setTimeOut和setInterval函数无效报错的问题
2020/07/30 Javascript
vue 手机物理监听键+退出提示代码
2020/09/09 Javascript
python re模块findall()函数实例解析
2018/01/19 Python
python psutil库安装教程
2018/03/19 Python
python中subprocess批量执行linux命令
2018/04/27 Python
浅谈Python3中strip()、lstrip()、rstrip()用法详解
2019/04/29 Python
详解使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件
2019/08/23 Python
Python字符串大小写转换拼接删除空白
2019/09/19 Python
Django框架model模型对象验证实现方法分析
2019/10/02 Python
Django-simple-captcha验证码包使用方法详解
2020/11/28 Python
CSS3中的transform属性进行2D和3D变换的基本用法
2016/05/12 HTML / CSS
印尼第一大家居、生活和家具电子商务:Ruparupa
2019/11/25 全球购物
节约能源标语
2014/06/17 职场文书
中学语文教学反思
2016/02/16 职场文书
CSS精灵图的原理与使用方法介绍
2022/03/17 HTML / CSS