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 相关文章推荐
用htc组件制作windows选项卡
Jan 13 Javascript
33个优秀的 jQuery 图片展示插件分享
Mar 14 Javascript
jquery Moblie入门—hello world的示例代码学习
Jan 08 Javascript
js改变鼠标的形状和样式的方法
Mar 31 Javascript
iframe子页面与父页面在同域或不同域下的js通信
May 07 Javascript
jQuery的deferred对象详解
Nov 12 Javascript
JavaScript第一篇之实现按钮全选、功能
Aug 21 Javascript
JavaScript实战(原生range和自定义特效)简单实例
Aug 21 Javascript
Angular实现跨域(搜索框的下拉列表)
Feb 16 Javascript
promise和co搭配生成器函数方式解决js代码异步流程的比较
May 25 Javascript
微信小程序授权登陆及每次检查是否授权实例代码
Sep 18 Javascript
js实现飞机大战小游戏
Aug 26 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密码生成类实例
2014/09/24 PHP
php微信公众号开发(3)php实现简单微信文本通讯
2016/12/15 PHP
PHP+jQuery实现滚屏无刷新动态加载数据功能详解
2017/05/04 PHP
PHP实现微信退款的方法示例
2019/03/26 PHP
Js中sort()方法的用法
2006/11/04 Javascript
常用的javascript function代码
2008/05/23 Javascript
ExtJS下grid的一些属性说明
2009/12/13 Javascript
js 剪切板的用法(clipboardData.setData)与js match函数介绍
2013/11/19 Javascript
Jquery获取和修改img的src值的方法
2014/02/17 Javascript
JavaScript简单实现鼠标拖动选择功能
2014/03/06 Javascript
jQuery中on()方法用法实例详解
2015/02/06 Javascript
Jquery实现textarea根据文本内容自适应高度
2015/04/03 Javascript
js自定义select下拉框美化特效
2016/05/12 Javascript
Bootstrap表单布局
2016/07/19 Javascript
Ubuntu系统下Angularjs开发环境安装
2016/09/01 Javascript
JS实现简单易用的手机端浮动窗口显示效果
2016/09/07 Javascript
ES6 proxy和reflect的使用方法与应用实例分析
2020/02/15 Javascript
原生js实现分页效果
2020/09/23 Javascript
[01:31]完美与DOTA2历程
2014/07/31 DOTA
Python实现从log日志中提取ip的方法【正则提取】
2018/03/31 Python
Python使用Flask-SQLAlchemy连接数据库操作示例
2018/08/31 Python
python如何解析配置文件并应用到项目中
2019/06/27 Python
Python模块 _winreg操作注册表
2020/02/05 Python
Pycharm IDE的安装和使用教程详解
2020/04/30 Python
tensorflow pb to tflite 精度下降详解
2020/05/25 Python
Python pandas对excel的操作实现示例
2020/07/21 Python
详解pycharm自动import所需的库的操作方法
2020/11/30 Python
使用css3实现超炫的loading加载动画效果
2014/05/07 HTML / CSS
如何利用input事件来监听移动端的输入
2016/04/15 HTML / CSS
大四自我鉴定范文
2013/10/06 职场文书
先进事迹报告会主持词
2014/04/02 职场文书
干部作风整顿自我剖析材料和整改措施
2014/09/18 职场文书
员工离职通知函
2015/04/25 职场文书
初中开学典礼新闻稿
2015/07/17 职场文书
SQL实战演练之网上商城数据库商品类别数据操作
2021/10/24 MySQL
Win11右下角图标点了没反应怎么办?Win11点击右下角图标无反应解决方法汇总
2022/07/07 数码科技