Opprette en Blogging App ved hjelp av React, Del 4 Oppdater og Slett innlegg

I den forrige delen av denne opplæringsserien så du hvordan du implementerer tilleggs- og displaypostfunksjonaliteten. I denne delen av opplæringsserien om å lage en blogging-app i React, implementerer du funksjonaliteten for å oppdatere og slette blogginnleggene..

Starter

La oss begynne med å klone kildekoden fra den siste delen av serien.

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

Når katalogen er blitt klonet, naviger til prosjektkatalogen og installer de nødvendige avhengighetene.

cd ReactBlogApp-AddPost npm installere

Start Node.js-serveren, og du vil få programmet å kjøre på http: // localhost: 7777 / index.html # /.

Opprette oppdaterings- og slettevisningen

La oss endre bloggoppføringen for å vise dataene i en tabellform med oppdateringen og slette ikoner. Inne i gjengivelsesmetoden til ShowPost komponent, erstatt eksisterende div med et bord som vist i koden:

 this.state.posts.map (funksjon (post, indeks) return   .bind (dette)) 
# Tittel Emne
Index + 1 Post.title Post.subject

Som vist i koden ovenfor har du endret den eksisterende koden for å vise innleggene i en tabellform. Du har kartlagt innlegg variabel for å iterere over innleggets samling og dynamisk opprette det nødvendige tr og td.

Lagre endringene ovenfor og start serveren på nytt. Pek nettleseren din til http: // localhost: 7777 / home # / og du bør kunne se blogginnlegget i tabellformat.

Implementere oppdateringsfunksjonen

For å implementere oppdateringspostfunksjonaliteten må du legge ved klikk-hendelsen til redigeringsikonet. Endre redigeringsikonet span som vist: 

Som vist i ovennevnte kode, har du passert post-ID som en parameter til updatePost metode.

Lag en metode updatePost inne i ShowPost komponent.

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

Som vist i den ovennevnte koden, har du utløst omadresseringen til siden for legge til post med iden til det redigerte elementet. På siden Legg til innlegg får du detaljene i blogginnlegget med passordet og fyller ut detaljene.

Endre ruteren for å inkludere en valgfri id-parameter på siden for legge til innlegg.

Inne i AddPost komponent, opprett en metode som kalles getPostWithId for å hente detaljene i blogginnlegget med id. Inne i getPostWithId metode, gjør et AJAX-anrop til getPostWithId API inne app.js.

getPostWithId () var id = this.props.params.id; var selv = dette; axios.post ('/ getPostWithId', id: id) .then (funksjon (svar) hvis (svar) self.setState (title: response.data.title); self.setState (subject: response.data.subject);) .catch (funksjon (feil) console.log ('feil er', feil);); 

Med svaret mottatt fra getPostWithId API-metoden, har du oppdatert tilstandsvariablene tittel og Emne

Endre tittel og Emne tekstbokser for å vise verdien fra tilstandsvariablene.

La oss nå lage getPostWithId API inne app.js for å lage en databaseanrop til MongoDB-databasen for å få postdetaljer med en bestemt ID. Her er getPostWithId API-metoden:

app.post ('/ getPostWithId', funksjon (req, res) var id = req.body.id; post.getPostWithId (id, funksjon (resultat) res.send (resultat)))

Inne i post.js fil, opprett en metode getPostWithId å spørre databasen for å hente detaljene. Slik ser det ut:

getPostWithId: funksjon (id, tilbakeringing) MongoClient.connect (url, funksjon (feil, db) db.collection ('post'). findOne (_id: ny mongodb.ObjectID (id), funksjon ) assert.equal (feil, null); hvis (err == null) callback (resultat) else callback (false));)

Som vist i ovennevnte kode har du gjort bruk av Finn én API for å få detaljene i blogginnlegget med et bestemt ID.

Lagre endringene ovenfor og prøv å kjøre programmet. Klikk på redigeringsikonet på hjemmesiden, og det vil omdirigere til siden for legge til innlegg og fylle ut tittelen og emnet.

Nå, for å oppdatere blogginnleggets detaljer, må du sjekke for id inne i addPost API-metoden i app.js. Hvis det er et nytt innlegg, vil id vil være udefinert.

Endre addPost metode inne i AddPost komponent for å inkludere id tilstandsvariabel.

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

Inne i addPost API-metoden, må du sjekke om id parameteren er udefinert eller ikke. Hvis udefinert, det betyr at det er et nytt innlegg, ellers må du ringe oppdateringsmetoden. Her er hva addPost API-metoden ser ut som:

app.post ('/ addpost', funksjon (req, res) varittel = req.body.title; var subject = req.body.subject; var id = req.body.id; hvis (id == "| | id == undefined) post.addPost (tittel, emne, funksjon (resultat) res.send (result);); else post.updatePost (id, tittel, emne, funksjon (resultat) res.send (resultat); );  )

Inne i post.js fil, opprett en metode som kalles updatePost å oppdatere blogginnleggets detaljer. Du vil gjøre bruk av updateOne API for å oppdatere detaljene i blogginnlegget med det aktuelle id. Her er hvordan updatePost metoden ser ut:

oppdateringPost: funksjon (id, tittel, emne, tilbakeringing) MongoClient.connect (url, funksjon (feil, db) db.collection ('post'). updateOne ("_id": nytt mongodb.ObjectID , $ sett: "tittel": tittel, "emne": emne, funksjon (feil, resultat) assert.equal (feil, null); hvis (err == null) tilbakeringing (falsk));); 

Lagre endringene ovenfor og start serveren på nytt. Logg inn på programmet og klikk på redigeringsikonet. Endre eksisterende verdier og klikk på knappen for å oppdatere detaljene. 

Implementere slettingsfunksjonen

For å implementere funksjonen for å slette innlegg, må du legge ved hendelsen på klikk til slettikonet. Endre slettikonet som vist:

Som vist i ovennevnte kode, har du passert post-ID som en parameter til deletePost metode. 

Opprett en metode som kalles deletePost inne i ShowPost komponent.

deletePost (id) 

Bind metoden i ShowPost komponent konstruktør.

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

For bruk dette inne i kart funksjon tilbakeringing, du må binde dette til kart funksjon. Endre kart funksjon tilbakeringing som vist:

 this.state.posts.map (funksjon (post, indeks) return  Index + 1  Post.title  Post.subject         .bind (dette)) 

Inne i deletePost metode, legg til en bekreftelsespåmelding før du ringer slettingsgrensesnittet.

deletePost (id) if (confirm ('Er du sikker?')) // Slett post API-anrop vil være her! 

La oss nå legge til deletePost API inne i app.js fil. API-en vil lese post-ID fra AJAX-anropet og slette oppføringen fra MongoDB. Her er hvordan deletePost API ser ut:

app.post ('/ deletePost', funksjon (req, res) var id = req.body.id; post.deletePost (id, funksjon (resultat) res.send (resultat)))

Som vist i ovennevnte kode, vil du ringe til deletePost metode i post.js fil og returnere resultatet. La oss lage deletePost metode inne i post.js fil.

deletePost: funksjon (id, tilbakeringing) MongoClient.connect (url, funksjon (feil, db) db.collection ('post'). deleteOne (_id: new mongodb.ObjectID (id), funksjon ) assert.equal (feil, null); console.log ("Slettet post."); hvis (err == null) tilbakeringing (sann) annet tilbakeringing (falsk);;)

Som vist i ovennevnte kode, er deletePost metode i post.js filen vil gjøre bruk av MongoClient å koble til bloggdatabasen i MongoDB. Bruker id passert fra AJAX-anropet, vil det slette innlegget fra databasen. 

Oppdater koden inne i deletePost metode i home.jsx fil for å inkludere AJAX-anropet til deletePost API i app.js fil.

deletePost (id) if (confirm ('Er du sikker?')) var self = this; axios.post ('/ deletePost', id: id) .then (funksjon (respons) ) .catch (funksjon (feil) ); 

Når blogginnlegget er slettet, må du oppdatere blogginnlegget for å gjenspeile dette. Så opprett en ny metode som heter getPost og flytte componentDidMount kode inne i den funksjonen. Her er getPost metode:

getPost () var selv = dette; axios.post ('/ getPost', ) .then (funksjon (svar) console.log ('res er', respons); self.setState (innlegg: response.data)) .catch (feil) console.log ('feil er', feil);); 

Endre componentDidMount kode som vist:

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

Inne i deletePost AJAX ringe suksess tilbakeringing, ringe til getPost Metode for å oppdatere blogginnlegget.

deletePost (id) if (confirm ('Er du sikker?')) var self = this; axios.post ('/ deletePost', id: id) .then (funksjon (respons) self.getPost ();) .catch (funksjon (feil) console.log ('Feil er', feil) ;); 

Lagre endringene ovenfor og start serveren på nytt. Prøv å legge til et nytt blogginnlegg, og klikk deretter slett fra rutenettlisten. Du blir bedt om å slette bekreftelsesmeldingen. Når du klikker på OK knappen, blir oppføringen slettet og blogginnlegget blir oppdatert.

Pakke det opp

I denne veiledningen så du hvordan du implementerer funksjonen for å slette og oppdatere blogginnlegg i React-bloggprogrammet. I neste del av opplæringsserien lærer du hvordan du implementerer profilsiden for en innlogget bruker.

Gi oss beskjed om dine tanker og forslag i kommentarene nedenfor. Kildekode fra denne opplæringen er tilgjengelig på GitHub.