欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

React實(shí)現(xiàn)評論的添加和刪除

 更新時間:2020年10月20日 16:51:01   作者:qqz_2016  
這篇文章主要為大家詳細(xì)介紹了React實(shí)現(xiàn)評論的添加和刪除,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了React實(shí)現(xiàn)評論添加和刪除的具體代碼,供大家參考,具體內(nèi)容如下

一、效果圖

二、需求描述

1. 手動輸入用戶名和評論內(nèi)容,點(diǎn)擊提交;輸入內(nèi)容被追加到右側(cè)評論列表;

2.  點(diǎn)擊評論列表的“刪除”按鈕,彈框提示確定刪除用戶“xx”;

3. 點(diǎn)擊“確定”,“xx”用戶發(fā)表的評論被刪除;

4. 所有評論均被刪除時,顯示“暫無評論,點(diǎn)擊添加評論!?。 ?/p>

三、代碼實(shí)現(xiàn)

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屬性
 // 初始化狀態(tài)
 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)
 // 更新狀態(tài)
 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)
 // 清楚輸入數(shù)據(jù)
 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>評論內(nèi)容:</label>
   <textarea className="form-control" rows="6" placeholder="請輸入評論內(nèi)容"
     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>評論回復(fù):</h4>
  <h5 style={{display}}>暫無評論,點(diǎn)擊添加評論?。。?lt;/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;

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Can't?perform?a?React?state?update?on?an?unmounted?component報錯解決

    Can't?perform?a?React?state?update?on?an?unmoun

    這篇文章主要為大家介紹了Can't?perform?a?React?state?update?on?an?unmounted?component報錯解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • 聊聊jenkins部署vue/react項目的問題

    聊聊jenkins部署vue/react項目的問題

    本文給大家介紹了jenkins部署vue/react項目的問題,文末給大家提到了centOS安裝jenkins的腳本,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2022-02-02
  • 如何創(chuàng)建自己的第一個React 頁面

    如何創(chuàng)建自己的第一個React 頁面

    React是用于構(gòu)建用戶界面的JavaScript庫,本文主要介紹了如何創(chuàng)建自己的第一個React頁面,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • React實(shí)現(xiàn)監(jiān)聽粘貼事件并獲取粘貼板中的截圖

    React實(shí)現(xiàn)監(jiān)聽粘貼事件并獲取粘貼板中的截圖

    這篇文章主要介紹了React實(shí)現(xiàn)監(jiān)聽粘貼事件并獲取粘貼板中的截圖方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • React組件設(shè)計模式之組合組件應(yīng)用實(shí)例分析

    React組件設(shè)計模式之組合組件應(yīng)用實(shí)例分析

    這篇文章主要介紹了React組件設(shè)計模式之組合組件,結(jié)合實(shí)例形式分析了React組件設(shè)計模式中組合組件相關(guān)概念、原理、應(yīng)用場景與操作注意事項,需要的朋友可以參考下
    2020-04-04
  • React Hooks常用場景的使用(小結(jié))

    React Hooks常用場景的使用(小結(jié))

    這篇文章主要介紹了React Hooks常用場景的使用,根據(jù)使用場景分別進(jìn)行舉例說明,幫助你認(rèn)識理解并可以熟練運(yùn)用 React Hooks 大部分特性,感興趣的可以了解一下
    2021-04-04
  • 使用react context 實(shí)現(xiàn)vue插槽slot功能

    使用react context 實(shí)現(xiàn)vue插槽slot功能

    這篇文章主要介紹了使用react context 實(shí)現(xiàn)vue插槽slot功能,文中給大家介紹了vue的slot的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2019-07-07
  • React?classnames原理及測試用例

    React?classnames原理及測試用例

    這篇文章主要為大家介紹了React?classnames原理及測試用例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • React學(xué)習(xí)筆記之事件處理(二)

    React學(xué)習(xí)筆記之事件處理(二)

    這篇文章主要跟大家介紹了關(guān)于React中事件處理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)React具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。
    2017-07-07
  • React利用路由實(shí)現(xiàn)登錄界面的跳轉(zhuǎn)

    React利用路由實(shí)現(xiàn)登錄界面的跳轉(zhuǎn)

    這篇文章主要介紹了React利用路由實(shí)現(xiàn)登錄界面的跳轉(zhuǎn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04

最新評論