当前位置: 首页 > 编程笔记 >

React实现评论的添加和删除

谷梁嘉悦
2023-03-14
本文向大家介绍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;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍JQuery实现动态添加删除评论的方法,包括了JQuery实现动态添加删除评论的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JQuery实现动态添加删除评论的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的jQuery程序设计有所帮助。

  • 本文向大家介绍asp.net-mvc 添加评论,包括了asp.net-mvc 添加评论的使用技巧和注意事项,需要的朋友参考一下 示例 Razor有自己的注释语法,其开头为@*,结尾为*@。 内联评论: 多行评论: HTML注释 您也可以使用普通的HTML注释语法<!--,-->以Razor视图开头和结尾。但是与其他注释不同,HTML注释中的Razor代码仍然可以正常执行。 上面的示例产生以下HTM

  • 请求header DELETE /v1/activity/{频道id}/comments/{评论id} Authorization:Bearer {ACCESS TOKEN} Content-Type:application/json 注: 请将上方的{ACCESS TOKEN}替换为您的ACCESS TOKEN 请将"{评论id}"替换您需要获取的评论id 请将"{频道id}"替换您需要获取的

  • 本文向大家介绍jQuery实现评论模块,包括了jQuery实现评论模块的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了jQuery实现评论模块的具体代码,供大家参考,具体内容如下 本模块可用于评论或留言,输入区模仿畅言,内容显示使用时间轴,以下是示例图。 实现代码如下: index.html publish_comment.css 以上就是本文的全部内容,希望对大家的学习有所帮助,也

  • 问题内容: 我正在尝试通过apache poi api向MS Word文档添加评论。 我已经通过使用完成了部分工作: 但是我不知道如何将其链接到真实注释,并且在api文档中也找不到任何相关内容。 有人知道如何解决吗? 问题答案: 在Office OpenXML Word文档()中,注释是 * .docx ZIP存档中的特殊内容。因此,首先我们需要访问该文档。但是直到现在,它们只会在创建时读取该软件

  • 本文向大家介绍jQuery实现简单评论功能,包括了jQuery实现简单评论功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了jQuery实现简单评论功能的具体代码,供大家参考,具体内容如下 例子: 效果: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。