亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
開(kāi)始使用
建立更新和刪除視圖
實(shí)作更新發(fā)布功能
實(shí)現(xiàn)刪除帖子功能
總結(jié)
首頁(yè) CMS教程 &#&按 在基於 React 的部落格應(yīng)用程式中更新和刪除帖子:第 4 部分

在基於 React 的部落格應(yīng)用程式中更新和刪除帖子:第 4 部分

Sep 04, 2023 am 09:05 AM

在本教學(xué)系列的前一部分中,您了解如何實(shí)現(xiàn)新增和顯示貼文功能。在有關(guān)在 React 中建立部落格應(yīng)用程式的教學(xué)系列的這一部分中,您將實(shí)現(xiàn)更新和刪除部落格文章的功能。

開(kāi)始使用

讓我們開(kāi)始複製本系列最後一部分的原始碼。

https://github.com/royagasthyan/ReactBlogApp-AddPost

克隆目錄後,導(dǎo)覽至專(zhuān)案目錄並安裝所需的依賴(lài)項(xiàng)。

cd ReactBlogApp-AddPost
npm install

啟動(dòng) Node.js 伺服器,應(yīng)用程式將在 http://localhost:7777/index.html#/ 上運(yùn)行。

建立更新和刪除視圖

讓我們修改部落格文章列表,以帶有更新和刪除圖示的表格形式顯示資料。在 ShowPost 元件的 render 方法中,將現(xiàn)有的 div 替換為表格,如程式碼所示:

<table className="table table-striped">
            <thead>
              <tr>
                <th>#</th>
                <th>Title</th>
                <th>Subject</th>
                <th></th>
                <th></th>
              </tr>
            </thead>
            <tbody>
              {
                this.state.posts.map(function(post,index) {
                   return <tr key={index} >
                            <td>{index+1}</td>
                            <td>{post.title}</td>
                            <td>{post.subject}</td>
                            <td>
                              <span className="glyphicon glyphicon-pencil"></span>
                            </td>
                            <td>
                              <span className="glyphicon glyphicon-remove"></span>
                            </td>
                          </tr>
                }.bind(this))
              }
            </tbody>
</table>

如上面的程式碼所示,您已修改現(xiàn)有程式碼以以表格形式顯示貼文。您已對(duì)應(yīng) posts 變數(shù)以迭代 posts 集合並動(dòng)態(tài)建立所需的 trtd

儲(chǔ)存以上變更並重新啟動(dòng)伺服器。將瀏覽器指向 http://localhost:7777/home#/,您應(yīng)該可以以表格格式查看部落格文章清單。

在基于 React 的博客應(yīng)用程序中更新和刪除帖子:第 4 部分

實(shí)作更新發(fā)布功能

要實(shí)現(xiàn)更新發(fā)布功能,您需要將點(diǎn)擊事件附加到編輯圖示。修改編輯圖示span如圖:?

<span onClick={this.updatePost.bind(this,post._id)} className="glyphicon glyphicon-pencil"></span>

如上面的程式碼所示,您已將貼文 ID 作為參數(shù)傳遞給 updatePost 方法。

ShowPost 元件內(nèi)建立一個(gè)方法 updatePost 。

updatePost(id){
  hashHistory.push('/addPost/' + id);
}

如上面的程式碼所示,您已使用已編輯項(xiàng)目的 ID 觸發(fā)了到新增貼文頁(yè)面的重定向。在新增貼文頁(yè)面中,您將獲得帶有傳遞的 ID 的部落格文章的詳細(xì)資訊並填入詳細(xì)資訊。

修改路由器以在新增貼文頁(yè)面中包含可選的 id 參數(shù)。

<Route component={AddPost} path="/addPost(/:id)"></Route>

AddPost 元件內(nèi),建立一個(gè)名為 getPostWithId 的方法,以使用 id 取得部落格文章的詳細(xì)資訊。在 getPostWithId 方法內(nèi),對(duì) app.js 內(nèi)的 getPostWithId API 進(jìn)行 AJAX 呼叫。

getPostWithId(){
  var id = this.props.params.id;
  var self = this;
  axios.post('/getPostWithId', {
    id: id
  })
  .then(function (response) {
    if(response){
      self.setState({title:response.data.title});
      self.setState({subject:response.data.subject});  
    }
  })
  .catch(function (error) {
    console.log('error is ',error);
  });
}

透過(guò)從 getPostWithId API 方法收到的回應(yīng),您已更新?tīng)顟B(tài)變數(shù) titlesubject。

修改 titlesubject 文字方塊以顯示狀態(tài)變數(shù)的值。

<div className="form-group">
    <input value={this.state.title} type="text" onChange={this.handleTitleChange} className="form-control" id="title" name="title" placeholder="Title" required />
</div>
               
<div className="form-group">
    <textarea value={this.state.subject} className="form-control" onChange={this.handleSubjectChange} type="textarea" id="subject" placeholder="Subject" maxlength="140" rows="7"></textarea>
</div>

現(xiàn)在,讓我們?cè)?app.js 中創(chuàng)建 getPostWithId API,以對(duì) MongoDB 資料庫(kù)進(jìn)行資料庫(kù)調(diào)用,以獲取具有特定 ID 的帖子詳細(xì)資訊。這是 getPostWithId API 方法:

app.post('/getPostWithId', function(req,res){
  var id = req.body.id;
  post.getPostWithId(id, function(result){
    res.send(result)
  })
})

post.js 檔案中,建立一個(gè)方法 getPostWithId 來(lái)查詢(xún)資料庫(kù)以取得詳細(xì)資訊。其外觀(guān)如下:

getPostWithId: function(id, callback){
	MongoClient.connect(url, function(err, db){
		 db.collection('post').findOne({
		 	_id: new mongodb.ObjectID(id)
		 },
		 function(err, result){
			assert.equal(err, null);
	    	if(err == null){
	    		callback(result)
	    	}
	    	else{
	    		callback(false)
	    	}
		});
	})
}

如上面的程式碼所示,您使用了 findOne API 來(lái)取得具有特定 ID 的部落格文章的詳細(xì)資訊。

儲(chǔ)存以上變更並嘗試執(zhí)行程式。點(diǎn)擊主頁(yè)上的編輯圖標(biāo),它將重定向到添加帖子頁(yè)面並填充標(biāo)題和主題。

在基于 React 的博客應(yīng)用程序中更新和刪除帖子:第 4 部分

現(xiàn)在,要更新部落格文章詳細(xì)信息,您需要檢查idapp.js 中的addPost API 方法內(nèi)。如果是新帖子,則 id 將為 undefined

修改 AddPost 元件中的 AddPost 方法以包含 id 狀態(tài)變數(shù)。

axios.post('/addPost', {
    title: this.state.title,
    subject: this.state.subject,
    id: this.state.id
})

addPost API 方法中,您需要檢查 id 參數(shù)是否為 undefined 。如果undefined,則表示這是一個(gè)新帖子,否則需要呼叫update方法。 addPost API 方法如下所示:

app.post('/addpost', function (req, res) {
  var title = req.body.title;
  var subject = req.body.subject;
  var id = req.body.id;
  if(id == '' || id == undefined)
    post.addPost(title, subject ,function(result){
      res.send(result);
    }); 
  }
  else{
    post.updatePost(id, title, subject ,function(result){
      res.send(result);
    }); 
  }
})

post.js 檔案中,建立一個(gè)名為 updatePost 的方法來(lái)更新部落格文章詳細(xì)資訊。您將利用 updateOne API 來(lái)更新具有特定 id 的部落格文章的詳細(xì)資訊。以下是 updatePost 方法的外觀(guān):

updatePost: function(id, title, subject, callback){
	MongoClient.connect(url, function(err, db) {
	  	db.collection('post').updateOne( 
	  		{ "_id": new mongodb.ObjectID(id) },
	  		{ $set: 
	  			{ "title" : title,
	  			  "subject" : subject 
	  			}
	  		},function(err, result){
			assert.equal(err, null);
	    	if(err == null){
	    		callback(true)
	    	}
	    	else{
	    		callback(false)
	    	}
		});
	});
}

保存以上更改并重新啟動(dòng)服務(wù)器。登錄應(yīng)用程序并點(diǎn)擊編輯圖標(biāo)。修改現(xiàn)有值并單擊按鈕更新詳細(xì)信息。

實(shí)現(xiàn)刪除帖子功能

要實(shí)現(xiàn)刪除帖子功能,您需要將點(diǎn)擊事件附加到刪除圖標(biāo)。修改刪除圖標(biāo)跨度如圖:

<span onClick={this.deletePost.bind(this,post._id)} className="glyphicon glyphicon-remove"></span>

如上面的代碼所示,您已將帖子 ID 作為參數(shù)傳遞給 deletePost 方法。

ShowPost 組件中創(chuàng)建一個(gè)名為 deletePost 的方法。

deletePost(id){
      
}

ShowPost組件構(gòu)造函數(shù)中綁定該方法。

this.deletePost = this.deletePost.bind(this);

要在 map 函數(shù)回調(diào)中使用 this,您需要將 this 綁定到 map 函數(shù)。修改map函數(shù)回調(diào)如圖:


      {
        this.state.posts.map(function(post,index) {
           return 
                    {index+1}
                    {post.title}
                    {post.subject}
                    
                      <span onClick={this.updatePost.bind(this,post._id)} className="glyphicon glyphicon-pencil"></span>
                    
                    
                      <span onClick={this.deletePost.bind(this,post._id)} className="glyphicon glyphicon-remove"></span>
                    
                  
        }.bind(this))
      }
 

deletePost 方法中,在調(diào)用刪除 API 之前添加確認(rèn)提示。

deletePost(id){
  if(confirm('Are you sure ?')){
    // Delete Post API call will be here !!
  }
}

現(xiàn)在讓我們?cè)?app.js 文件中添加 deletePost API。 API 將從 AJAX 調(diào)用中讀取帖子 ID 并從 MongoDB 中刪除該條目。以下是 deletePost API 的外觀(guān):

app.post('/deletePost', function(req,res){
  var id = req.body.id;
  post.deletePost(id, function(result){
    res.send(result)
  })
})

如上面的代碼所示,您將調(diào)用 post.js 文件中的 deletePost 方法并返回結(jié)果。讓我們?cè)?post.js 文件中創(chuàng)建 deletePost 方法。

deletePost: function(id, callback){

	MongoClient.connect(url, function(err, db){
		 db.collection('post').deleteOne({
		 	_id: new mongodb.ObjectID(id)
		 },
		 function(err, result){
			assert.equal(err, null);
	    	console.log("Deleted the post.");
	    	if(err == null){
	    		callback(true)
	    	}
	    	else{
	    		callback(false)
	    	}
		});
	})
}

如上面的代碼所示,post.js 文件中的 deletePost 方法將使用 MongoClient 連接到MongoDB 中的博客數(shù)據(jù)庫(kù)。使用從 AJAX 調(diào)用傳遞的 Id ,它將從數(shù)據(jù)庫(kù)中刪除該帖子。

更新 home.jsx 文件中 deletePost 方法內(nèi)的代碼,以包含對(duì) deletePost API 的 AJAX 調(diào)用 app.js 文件。

deletePost(id){
  if(confirm('Are you sure ?')){
    var self = this;
    axios.post('/deletePost', {
      id: id
    })
    .then(function (response) {
      
    })
    .catch(function (error) {
      
    });
  }
}

刪除博客文章后,您需要刷新博客文章列表以反映這一點(diǎn)。因此,創(chuàng)建一個(gè)名為 getPost 的新方法,并將 componentDidMount 代碼移到該函數(shù)內(nèi)。這是 getPost 方法:

getPost(){
  var self = this;
  axios.post('/getPost', {
  })
  .then(function (response) {
    console.log('res is ',response);
    self.setState({posts:response.data})
  })
  .catch(function (error) {
    console.log('error is ',error);
  });
}

修改componentDidMount代碼,如圖:

componentDidMount(){
  this.getPost();

  document.getElementById('homeHyperlink').className = "active";
  document.getElementById('addHyperLink').className = "";
}

deletePost AJAX 調(diào)用成功回調(diào)內(nèi),調(diào)用 getPost 方法來(lái)更新博客文章列表。

deletePost(id){
  if(confirm('Are you sure ?')){
    var self = this;
    axios.post('/deletePost', {
      id: id
    })
    .then(function (response) {
      self.getPost();
    })
    .catch(function (error) {
      console.log('Error is ',error);
    });
  }
}

保存以上更改并重新啟動(dòng)服務(wù)器。嘗試添加新的博客文章,然后從網(wǎng)格列表中單擊“刪除”。系統(tǒng)將提示您一條刪除確認(rèn)消息。單擊確定按鈕后,該條目將被刪除,并且博客文章列表將被更新。

在基于 React 的博客應(yīng)用程序中更新和刪除帖子:第 4 部分

總結(jié)

在本教程中,您了解了如何在 React 博客應(yīng)用程序中實(shí)現(xiàn)刪除和更新博客文章功能。在本教程系列的下一部分中,您將了解如何為登錄用戶(hù)實(shí)現(xiàn)個(gè)人資料頁(yè)面。

請(qǐng)?jiān)谙旅娴脑u(píng)論中告訴我們您的想法和建議。本教程的源代碼可在 GitHub 上獲取。

以上是在基於 React 的部落格應(yīng)用程式中更新和刪除帖子:第 4 部分的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線(xiàn)上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門(mén)話(huà)題

如何恢復(fù)WordPress核心更新 如何恢復(fù)WordPress核心更新 Jul 02, 2025 am 12:05 AM

要回滾WordPress版本,可使用插件或手動(dòng)替換核心文件,並禁用自動(dòng)更新。 1.使用WPDowngrade等插件輸入目標(biāo)版本號(hào)即可自動(dòng)下載替換;2.手動(dòng)下載舊版WordPress並通過(guò)FTP替換wp-includes、wp-admin等文件但保留wp-config.php和wp-content;3.在wp-config.php中添加代碼或使用過(guò)濾器禁用核心自動(dòng)更新以防止再次升級(jí)。操作前務(wù)必備份網(wǎng)站和數(shù)據(jù)庫(kù),確保安全可靠。長(zhǎng)期建議保持最新版以保障安全性與功能支持。

如何在WordPress中創(chuàng)建自定義短代碼 如何在WordPress中創(chuàng)建自定義短代碼 Jul 02, 2025 am 12:21 AM

在WordPress中創(chuàng)建自定義短代碼的步驟如下:1.通過(guò)functions.php文件或自定義插件編寫(xiě)PHP函數(shù);2.使用add_shortcode()將函數(shù)綁定到短代碼標(biāo)籤;3.在函數(shù)中處理參數(shù)並返回輸出內(nèi)容。例如,創(chuàng)建按鈕短代碼時(shí)可定義顏色和鏈接參數(shù),實(shí)現(xiàn)靈活配置。使用時(shí)可在編輯器中插入類(lèi)似[buttoncolor="red"url="https://example.com"]點(diǎn)擊這裡[/button]的標(biāo)籤,並可通過(guò)do_shortcode()在模

如何診斷WordPress引起的高CPU使用 如何診斷WordPress引起的高CPU使用 Jul 06, 2025 am 12:08 AM

WordPress導(dǎo)致服務(wù)器CPU使用率飆升的主要原因包括插件問(wèn)題、數(shù)據(jù)庫(kù)查詢(xún)效率低、主題代碼質(zhì)量差或流量激增。 1.首先通過(guò)top、htop或控制面板工具確認(rèn)是否為WordPress引起的高負(fù)載;2.進(jìn)入故障排查模式逐步啟用插件排查性能瓶頸,使用QueryMonitor分析插件執(zhí)行情況並刪除或替換低效插件;3.安裝緩存插件、清理冗餘數(shù)據(jù)、分析慢查詢(xún)?nèi)照I以?xún)?yōu)化數(shù)據(jù)庫(kù);4.檢查主題是否存在過(guò)度加載內(nèi)容、複雜查詢(xún)或缺乏緩存機(jī)制等問(wèn)題,建議用標(biāo)準(zhǔn)主題測(cè)試對(duì)比並優(yōu)化代碼邏輯。按照上述步驟逐一排查可定位並解

如何在沒(méi)有插件的情況下優(yōu)化WordPress 如何在沒(méi)有插件的情況下優(yōu)化WordPress Jul 05, 2025 am 12:01 AM

優(yōu)化WordPress站點(diǎn)不依賴(lài)插件的方法包括:1.使用輕量級(jí)主題,如Astra或GeneratePress,避免功能堆砌的主題;2.手動(dòng)壓縮和合併CSS、JS文件,減少HTTP請(qǐng)求;3.上傳前優(yōu)化圖片,使用WebP格式並控製文件大??;4.配置.htaccess啟用瀏覽器緩存,並接入CDN提升靜態(tài)資源加載速度;5.限製文章修訂版本並定期清理數(shù)據(jù)庫(kù)冗餘數(shù)據(jù)。

如何在WordPress中縮小JavaScript文件 如何在WordPress中縮小JavaScript文件 Jul 07, 2025 am 01:11 AM

MinifyingJavaScript文件可通過(guò)刪除空白、註釋和無(wú)用代碼來(lái)提升WordPress網(wǎng)站加載速度。 1.使用支持合併壓縮的緩存插件如W3TotalCache,在“Minify”選項(xiàng)中啟用並選擇壓縮模式;2.使用專(zhuān)用壓縮插件如FastVelocityMinify,提供更精細(xì)控制;3.手動(dòng)壓縮JS文件並通過(guò)FTP上傳,適用於熟悉開(kāi)發(fā)工具的用戶(hù)。注意部分主題或插件腳本可能與壓縮功能衝突,啟用後需徹底測(cè)試網(wǎng)站功能。

如何使用瞬態(tài)API進(jìn)行緩存 如何使用瞬態(tài)API進(jìn)行緩存 Jul 05, 2025 am 12:05 AM

TransientsAPI是WordPress中用於臨時(shí)存儲(chǔ)可自動(dòng)過(guò)期數(shù)據(jù)的內(nèi)置工具,其核心函數(shù)為set_transient、get_transient和delete_transient。相比OptionsAPI,transients支持設(shè)置生存時(shí)間(TTL),適合緩存API請(qǐng)求結(jié)果、複雜計(jì)算數(shù)據(jù)等場(chǎng)景。使用時(shí)需注意key命名唯一性與命名空間、緩存“懶刪除”機(jī)制及對(duì)象緩存環(huán)境下可能不持久的問(wèn)題。典型應(yīng)用場(chǎng)景包括減少外部請(qǐng)求頻率、控制代碼執(zhí)行節(jié)奏和提升頁(yè)面加載性能。

如何使用對(duì)象緩存進(jìn)行持續(xù)存儲(chǔ) 如何使用對(duì)象緩存進(jìn)行持續(xù)存儲(chǔ) Jul 03, 2025 am 12:23 AM

對(duì)象緩存可輔助持久存儲(chǔ),適用於高訪(fǎng)問(wèn)低更新、可容忍短暫丟失的數(shù)據(jù)。 1.適合用緩存“持久化”的數(shù)據(jù)包括用戶(hù)配置、熱門(mén)商品信息等,能從數(shù)據(jù)庫(kù)恢復(fù)但使用緩存可加速訪(fǎng)問(wèn)。 2.選擇Redis等支持持久化的緩存後端,啟用RDB或AOF模式,並配置合理過(guò)期策略,但不能替代主數(shù)據(jù)庫(kù)。 3.設(shè)置長(zhǎng)TTL或永不過(guò)期鍵,採(cǎi)用清晰鍵名結(jié)構(gòu)如user:1001:profile,修改數(shù)據(jù)時(shí)同步更新緩存。 4.可結(jié)合本地與分佈式緩存,本地存小數(shù)據(jù)、Redis存大數(shù)據(jù)並用於重啟後恢復(fù),同時(shí)注意一致性與資源佔(zhàn)用問(wèn)題。

如何以編程方式防止評(píng)論垃圾郵件 如何以編程方式防止評(píng)論垃圾郵件 Jul 08, 2025 am 12:04 AM

防止評(píng)論垃圾信息最有效的方式是通過(guò)程序化手段自動(dòng)識(shí)別並攔截。 1.使用驗(yàn)證碼機(jī)制(如GooglereCAPTCHA或hCaptcha)可有效區(qū)分人類(lèi)與機(jī)器人,尤其適合公眾網(wǎng)站;2.設(shè)置隱藏字段(Honeypot技術(shù)),利用機(jī)器人自動(dòng)填寫(xiě)特性識(shí)別垃圾評(píng)論,不影響用戶(hù)體驗(yàn);3.檢查評(píng)論內(nèi)容關(guān)鍵詞黑名單,通過(guò)敏感詞匹配過(guò)濾垃圾信息,需注意避免誤判;4.判斷評(píng)論頻率與來(lái)源IP,限制單位時(shí)間內(nèi)的提交次數(shù)並建立黑名單;5.使用第三方反垃圾服務(wù)(如Akismet、Cloudflare)提升識(shí)別準(zhǔn)確性??筛鶕?jù)網(wǎng)站

See all articles