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 相关文章推荐
IE7提供XMLHttpRequest对象为兼容
Mar 08 Javascript
javascript Xml增删改查(IE下)操作实现代码
Jan 30 Javascript
js 点击按钮弹出另一页,选择值后,返回到当前页
May 26 Javascript
页面只能打开一次Cooike如何实现
Dec 04 Javascript
jquery的选择器的使用技巧之如何选择input框
Sep 22 Javascript
Node.js返回JSONP详解
May 18 Javascript
深入浅出ES6之let和const命令
Aug 25 Javascript
详解Vue生命周期的示例
Mar 10 Javascript
浅谈angularjs中响应回车事件
Apr 24 Javascript
Vue 组件间的样式冲突污染
Aug 31 Javascript
利用nginx + node在阿里云部署https的步骤详解
Dec 19 Javascript
js实现上下左右键盘控制div移动
Jan 16 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写的简单留言本实例代码
2008/07/25 PHP
Codeigniter通过SimpleXML将xml转换成对象的方法
2015/03/19 PHP
PHP中$_SERVER使用说明
2015/07/05 PHP
Symfony2实现在doctrine中内置数据的方法
2016/02/05 PHP
利用PHP自动生成印有用户信息的名片
2016/08/01 PHP
PHP使用curl_multi实现并发请求的方法示例
2018/04/29 PHP
PHP封装的验证码工具类定义与用法示例
2018/08/22 PHP
瀑布流的实现方式(原生js+jquery+css3)
2020/06/28 Javascript
JavaScript兼容浏览器FF/IE技巧
2016/08/14 Javascript
jquery.Jcrop结合JAVA后台实现图片裁剪上传实例
2016/11/05 Javascript
清除输入框内的空格
2016/12/21 Javascript
深入理解jquery中extend的实现
2016/12/22 Javascript
详解Jquery Easyui的验证扩展
2017/01/09 Javascript
实例解析js中try、catch、finally的执行规则
2017/02/24 Javascript
vue实现树形菜单效果
2018/03/19 Javascript
js获取对象,数组所有属性键值(key)和对应值(value)的方法示例
2019/06/19 Javascript
vue使用echarts图表自适应的几种解决方案
2020/12/04 Vue.js
python模拟新浪微博登陆功能(新浪微博爬虫)
2013/12/24 Python
详解Python中的Cookie模块使用
2015/07/06 Python
Python虚拟环境的原理及使用详解
2019/07/02 Python
Python模块的定义,模块的导入,__name__用法实例分析
2020/01/07 Python
Python对Tornado请求与响应的数据处理
2020/02/12 Python
python 项目目录结构设置
2020/02/14 Python
Python爬虫之Selenium库的使用方法
2021/01/03 Python
CSS3实现的文本3D效果附图
2014/09/03 HTML / CSS
乌克兰电子产品和家用电器购物网站:TOUCH
2019/08/09 全球购物
黑猩猩商店:The Chimp Store
2020/02/12 全球购物
珍珠鸟教学反思
2014/02/01 职场文书
课外访万家心得体会
2014/09/03 职场文书
2014年工程工作总结
2014/11/25 职场文书
职工年度考核评语
2014/12/31 职场文书
行政撤诉申请书
2015/05/18 职场文书
导游词之山西祁县乔家大院
2019/10/14 职场文书
Java后台生成图片的完整步骤
2021/08/04 Java/Android
Spring Bean是如何初始化的详解
2022/03/22 Java/Android
Redis分布式锁的7种实现
2022/04/01 Redis