Een bloggen-app maken met Reageren, deel 4 Posten bijwerken en verwijderen

In het vorige deel van deze zelfstudieserie zag je hoe je de functionaliteit voor het toevoegen en weergeven van berichten implementeerde. In dit deel van de zelfstudiereeks over het maken van een blogapp in React, implementeert u de functionaliteit om de blogberichten bij te werken en te verwijderen.

Ermee beginnen

Laten we beginnen door de broncode uit het laatste deel van de serie te klonen.

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

Nadat de map is gekloond, navigeert u naar de projectdirectory en installeert u de vereiste afhankelijkheden.

cd ReactBlogApp-AddPost npm install

Start de Node.js-server en de toepassing wordt uitgevoerd op http: // localhost: 7777 / index.html # /.

De update maken en weergave verwijderen

Laten we de lijst met blogposts aanpassen om de gegevens in een tabelvorm weer te geven met de pictogrammen voor bijwerken en verwijderen. Binnen de rendermethode van de showpost component, vervang de bestaande div met een tabel zoals weergegeven in de code:

 this.state.posts.map (functie (post, index) ga terug   .bind (this)) 
# Titel Onderwerpen
Index + 1 Post.title Post.subject

Zoals te zien is in de bovenstaande code, hebt u de bestaande code aangepast om de berichten in een tabelvorm weer te geven. U hebt de posts variabele om te itereren over de berichtenverzameling en dynamisch de vereiste te maken tr en td.

Sla de bovenstaande wijzigingen op en start de server opnieuw. Richt uw browser op http: // localhost: 7777 / home # / en u zou de vermelding van de blogpost in tabelvorm kunnen bekijken.

Implementeren van de update-functie

Om de update-postfunctionaliteit te implementeren, moet u de on-click-gebeurtenis koppelen aan het bewerkingspictogram. Pas het pictogram Bewerken aan span zoals getoond: 

Zoals te zien is in de bovenstaande code, hebt u de post-id doorgegeven als een parameter voor de updatePost methode.

Maak een methode updatePost binnen in de showpost bestanddeel.

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

Zoals te zien is in de bovenstaande code, hebt u de omleiding naar de postpagina toevoegen geactiveerd met de id van het bewerkte item. Op de pagina voor het toevoegen van berichten krijgt u de details van het blogbericht met het doorgegeven id en vult u de details in.

Wijzig de router zodat deze een optionele id-parameter bevat voor de postpagina toevoegen.

Binnen in de AddPost component, maak een methode genaamd getPostWithId om de details van de blogpost op te halen ID kaart. Binnen in de getPostWithId methode, voer een AJAX-oproep naar de getPostWithId API binnen app.js.

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 (functie (fout) console.log ('error is', error);); 

Met het antwoord ontvangen van de getPostWithId API-methode, u hebt de statusvariabelen bijgewerkt titel en onderwerpen

Wijzig de titel en onderwerpen tekstvakken om de waarde van de toestandsvariabelen weer te geven.

Laten we nu de getPostWithId API binnen app.js om een ​​databaseaanroep naar de MongoDB-database te maken om de postdetails met een bepaalde ID te krijgen. Hier is de getPostWithId API-methode:

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

Binnen in de post.js bestand, maak een methode aan getPostWithId om de database te doorzoeken om de details op te halen. Hier is hoe het eruit ziet:

getPostWithId: function (id, callback) MongoClient.connect (url, functie (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));)

Zoals te zien in de bovenstaande code, hebt u gebruik gemaakt van de vind een API om de details van het blogbericht met een bepaald ID te krijgen.

Sla de bovenstaande wijzigingen op en probeer het programma uit te voeren. Klik op het pictogram Bewerken op de startpagina en het zal doorverwijzen naar de postpagina toevoegen en de titel en het onderwerp vullen.

Om de details van de blogpost bij te werken, moet u nu controleren op ID kaart binnen in de addPost API-methode in de app.js. Als het een nieuw bericht is, de ID kaart zal zijn onbepaald.

Wijzig de addPost methode binnen de AddPost component om de ID kaart toestandsvariabele.

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

Binnen in de addPost API-methode, je moet controleren of de ID kaart parameter is onbepaald of niet. Als onbepaald, het betekent dat het een nieuw bericht is, anders moet je de update-methode bellen. Hier is wat de addPost API-methode ziet eruit als:

app.post ('/ addpost', functie (req, res) var title = req.body.title; var subject = req.body.subject; var id = req.body.id; if (id == "| | id == undefined) post.addPost (titel, onderwerp, functie (resultaat) res.send (result);); else post.updatePost (id, titel, onderwerp, functie (resultaat) res.send (resultaat); );  )

Binnen in de post.js bestand, maakt u een methode genaamd updatePost om de details van het blogbericht bij te werken. U zult gebruik maken van de updateOne API om de details van het blogbericht bij te werken met het betreffende ID kaart. Hier is hoe het updatePost methode lijkt:

updatePost: functie (id, titel, onderwerp, callback) MongoClient.connect (url, functie (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));); 

Sla de bovenstaande wijzigingen op en start de server opnieuw. Meld u aan bij de toepassing en klik op het pictogram Bewerken. Wijzig de bestaande waarden en klik op de knop om de details bij te werken. 

Implementeren van de verwijder postfunctie

Om de verwijderingspostfunctionaliteit te implementeren, moet u de on-click-gebeurtenis koppelen aan het verwijderpictogram. Pas de pictogrambreedte voor verwijderen aan zoals getoond:

Zoals te zien is in de bovenstaande code, hebt u de post-id doorgegeven als een parameter voor de Verwijder gepost bericht methode. 

Maak een methode genaamd Verwijder gepost bericht binnen in de showpost bestanddeel.

deletePost (id) 

Bind de methode in de showpost component constructor.

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

Voor gebruik deze binnen in de kaart functie callback, je moet binden deze naar de kaart functie. Wijzig de kaart functie callback zoals getoond:

 this.state.posts.map (functie (post, index) ga terug  Index + 1  Post.title  Post.subject         .bind (this)) 

Binnen in de Verwijder gepost bericht methode, voeg een bevestigingsprompt toe voordat u de verwijder-API aanroept.

deletePost (id) if (bevestigen ('Weet je het zeker?')) // Post API-oproep verwijderen is hier !! 

Laten we nu het Verwijder gepost bericht API in de app.js het dossier. De API leest het bericht-ID van het AJAX-gesprek en verwijdert het bericht uit MongoDB. Hier is hoe het Verwijder gepost bericht API ziet eruit:

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

Zoals te zien is in de bovenstaande code, belt u naar de Verwijder gepost bericht methode in de post.js bestand en retourneer het resultaat. Laten we het maken Verwijder gepost bericht methode binnen de post.js het dossier.

deletePost: function (id, callback) MongoClient.connect (url, functie (err, db) db.collection ('post'). deleteOne (_id: new mongodb.ObjectID (id), function (err, result ) assert.equal (err, null); console.log ("Het bericht is verwijderd."); if (err == null) callback (true) else callback (false));)

Zoals te zien in de bovenstaande code, de Verwijder gepost bericht methode in de post.js bestand zal gebruik maken van de MongoClient om verbinding te maken met de blog-database in MongoDB. De ... gebruiken ID kaart doorgegeven via de AJAX-aanroep, wordt het bericht uit de database verwijderd. 

Werk de code in de Verwijder gepost bericht methode in de home.jsx bestand om de AJAX-oproep op te nemen in de Verwijder gepost bericht API in de app.js het dossier.

deletePost (id) if (bevestigen ('Weet u het zeker?')) var self = this; axios.post ('/ deletePost', id: id) .then (functie (antwoord) ). catch (functie (fout) ); 

Zodra het blogbericht is verwijderd, moet u de vermelding van het blogbericht vernieuwen om dit weer te geven. Dus maak een nieuwe methode genaamd getPost en verplaats de componentDidMount code binnen die functie. Hier is de getPost methode:

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

Wijzig de componentDidMount code zoals getoond:

componentDidMount () this.getPost (); document.getElementById ('homeHyperlink'). className = "actief"; document.getElementById ('addHyperLink'). className = ""; 

Binnen in de Verwijder gepost bericht AJAX call succes callback, bel naar de getPost methode om de blogpostlijst bij te werken.

deletePost (id) if (bevestigen ('Weet u het zeker?')) var self = this; axios.post ('/ deletePost', id: id) .then (function (response) self.getPost ();) .catch (function (error) console.log ('Fout is', fout) ;); 

Sla de bovenstaande wijzigingen op en start de server opnieuw. Probeer een nieuw blogbericht toe te voegen en klik vervolgens op Verwijderen in de rasterlijst. U wordt gevraagd om een ​​bevestigingsbericht voor verwijderen. Als u eenmaal op de OK knop, het item zal worden verwijderd en de blogpostlijst zal worden bijgewerkt.

Inpakken

In deze zelfstudie zag u hoe u de functie voor het verwijderen en bijwerken van blogberichten implementeerde in de React-blogtoepassing. In het volgende deel van de zelfstudiereeks leert u hoe u de profielpagina voor een ingelogde gebruiker implementeert.

Laat ons uw mening en suggesties weten in de opmerkingen hieronder. Broncode van deze tutorial is beschikbaar op GitHub.