Een blogging-app maken met React, deel 6 tags

In het vorige deel van deze tutorialserie zag je hoe je de profielpagina-functie implementeerde voor de React-blogtoepassing. In deze zelfstudie ziet u hoe u tags voor de blogberichten kunt implementeren.

Ermee beginnen

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

https://github.com/royagasthyan/ReactBlog-Profile

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

cd ReactBlogApp-Profiel npm install

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

De tagpagina maken

Laten we beginnen met het maken van een link voor de gebruiker om een ​​tag toe te voegen aan de MongoDB-database. In de index.html pagina, voeg er nog een toe li voor de Tag toevoegen pagina.

  • Label
  • Wanneer de gebruiker op de knop klikt Tag toevoegen link, zou het moeten weergeven AddTag Reageer component. Dus laten we een route toevoegen voor de Tag toevoegen component in de home.jsx het dossier.

    Hier is de volledige routelijst:

    ReactDOM.render (      , document.getElementById ( 'app'));

    Laten we het maken AddTag component die wordt weergegeven wanneer de gebruiker op de koppeling Tag toevoegen klikt. 

    class AddTag breidt React.Component constructor (props) super (rekwisieten);  componentDidMount () document.getElementById ('addHyperLink'). className = ""; document.getElementById ('homeHyperlink'). className = ""; document.getElementById ('profileHyperlink'). className = ""; document.getElementById ('tagHyperlink'). className = "active";  render () retourneren ( 

    )

    Zoals te zien in de bovenstaande code, binnen de AddTag reageer componentklasse die u de standaard HTML-sjabloon voor de pagina hebt gerenderd. Binnen in de componentDidMount methode heb je de klassenaam om het te maken AddTag hyperlink actief.

    Sla de bovenstaande wijzigingen op en start de server opnieuw. Log in op de applicatie en klik op de Tag toevoegen link en u kunt de Tag toevoegen pagina.

    De Tag-functionaliteit implementeren

    Definieer een toestandsvariabele om de wijziging van de tag bij te houden.

    constructor (rekwisieten) super (rekwisieten); this.state = tag: ";

    Bevestig de tagstatusvariabele aan het invoerelement in de weergavemethode.

    Zoals te zien is in de bovenstaande code, hebt u ook een onChange event naar de invoer om de waardeverandering bij te houden. Bind de onChange methode handleTagChange in de constructor.

    constructor (rekwisieten) super (rekwisieten); this.handleTagChange = this.handleTagChange.bind (this); this.state = tag: ";

    Laten we nu de definiëren handleTagChange methode binnen de AddTag Reageer component.

    handleTagChange (e) this.setState (tag: e.target.value)

    Wanneer de gebruiker op de knop Toevoegen klikt om de tag toe te voegen, moet u de gegevens opslaan. Dus laten we een bij klikken gebeurtenis naar de invoerknop.

    Bind de addTag methode binnen de componentencomponent React en definieer de methode om een ​​API-aanroep te doen naar het eindpunt van de Node.js-server.

    constructor (rekwisieten) super (rekwisieten); this.addTag = this.addTag.bind (this); this.handleTagChange = this.handleTagChange.bind (this); this.state = tag: ";

    Laten we de volgende definiëren addTag methode om de API aanroep te doen naar de / addtag eindpunt.

    addTag () axios.post ('/ addtag', tag: this.state.tag) .then (function (response) console.log ('reponse from add tag is', response);) .catch (functie (fout) console.log (error);); 

    Laten we het Node.js API-eindpunt maken voor / addTag. Binnen in de app.js bestand, maak de / addTag route, die de gegevens zal ontleden en de gegevens in de MongoDB-database zal invoegen.

    app.post ('/ addtag', functie (req, res) var tag = req.body.tag; post.addTag (tag, function (result) res.send (result););)

    Binnen in de / addTag eindpunt, hebt u een oproep gedaan naar een methode met de naam addTag van de post.js het dossier. Laten we het maken addTag methode binnen de post.js het dossier. Hier is hoe het eruit ziet:

    addTag: function (tagName, callback) MongoClient.connect (url, functie (err, db) db.collection ('tag'). insertOne ("name": tagName, function (err, result) beweren. equal (err, null); console.log ("Saved the tag details."); if (err == null) callback (true) else callback (false));); 

    Zoals te zien is in de bovenstaande code, die je hebt gebruikt MongoClient om verbinding te maken met de MongoDB-database. U hebt de taggegevens ingevoegd in een verzameling met de tag tag in de database. Nadat de gegevens zonder fouten zijn ingevoegd, wordt Boolean true doorgegeven aan de callback-functie. Als een fout wordt aangetroffen, wordt een Boolean-fout geretourneerd naar de callback-functie.

    Sla de bovenstaande wijzigingen op en start de server opnieuw. Log in op de app en klik op de Tag toevoegen link. Voer een tagnaam in en klik op de Toevoegen knop. Controleer de browserconsole en u zou het succesbericht in de browserconsole kunnen zien. 

    De tags vullen op de pagina Bericht toevoegen

    Nadat u de tags van de hebt toegevoegd Tag toevoegen pagina, tags moeten worden ingevuld in de Voeg bericht toe pagina. Laten we beginnen met het creëren van een methode genaamd getTags binnen in de post.js bestand dat verbinding zou maken met de MongoDB-database en de tags zou ophalen. Hier is hoe het eruit ziet:

    getTag: function (callback) MongoClient.connect (url, functie (err, db) db.collection ('tag', function (err, collection) collection.find (). toArray (function (err, list)  callback (lijst);););)

    Zoals te zien is in de bovenstaande code, hebt u de MongoClient gebruikt om verbinding te maken met de MongoDB-database. Zodra de verzameling is opgehaald, is deze geconverteerd naar array met behulp van de toArray methode en vervolgens doorgegeven aan de callback-functie. 

    Maak vervolgens het Node.js API-eindpunt dat het bovenstaande zal oproepen gettag methode in app.js

    app.post ('/ gettag', functie (req, res) post.getTag (functie (resultaat) res.send (result););)

    In de home.jsx bestand in de AddPost component, maak een methode genaamd getTags welke het zal maken / gettag API-aanroep en haal de taglijst op. 

    getTags () var self = this; axios.post ('/ getTag', ) .then (functie (antwoord) if (reactie) self.setState (tags: response.data);) .catch (function (error) console .log ('error is', error);); 

    Nadat de gegevens zijn opgehaald uit de API, stelt u de gegevens in de labels toestandsvariabele.

    Binnen de rendermethode van de showpost Reageer component, voeg het geselecteerde HTML-element toe om het te binden labels toestandsvariabele. Hier is hoe het eruit zou zien:

    Zoals te zien in de bovenstaande code, hebt u de kaart methode om de kaart in kaart te brengen labels toestandsvariabele voor het selectie-element.

    Binnen in de componentDidMount methode, bel naar de getTags methode om tags te laden zodra het component is gemount.

    componentDidMount () document.getElementById ('addHyperLink'). className = "active"; document.getElementById ('homeHyperlink'). className = ""; document.getElementById ('profileHyperlink'). className = ""; document.getElementById ('tagHyperlink'). className = ""; this.getPostWithId (); this.getTags (); 

    Sla de bovenstaande wijzigingen op en start de server opnieuw. Nadat u de. Hebt geladen Voeg bericht toe pagina, moet u de tags hebben geladen in een geselecteerd HTML-element.

    Laten we een standaardoptie toevoegen in de vervolgkeuzelijst met waarde 0.

    U hebt een onChange gebeurtenis voor het geselecteerde HTML-element. Hier is wat de handleTagChange evenement ziet eruit als:

    handleTagChange (e) this.setState (tag: e.target.value)

    Nadat de gebruiker de tag heeft geselecteerd, is de waarde beschikbaar in de statusvariabele label

    Omvat de label variabele in de addPost methode in de AddPost Reageer component. 

    addPost () axios.post ('/ addPost', title: this.state.title, subject: this.state.subject, tag: this.state.tag, id: this.props.params.id). then (function (response) console.log ('antwoord van add post is', response); hashHistory.push ('/')) .catch (function (error) console.log (error);); 

    Verander de / addpost API-eindpunt om het label parameter.

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

    Wijzig de addPost methode in de post.js bestand om de label parameter.

    addPost: functie (titel, onderwerp, tag, callback) MongoClient.connect (url, functie (err, db) db.collection ('post'). insertOne ("title": title, "subject": subject, "tag": tag, functie (err, resultaat) assert.equal (err, null); console.log ("De details van de blogpost opgeslagen."); if (err == null) callback (true) else callback (false));); 

    Wijzig de getPostWithId methode om de vervolgkeuzelijst in te stellen wanneer het postdetail wordt opgehaald.

    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); self.setState (tag: response.data.tag)) .catch (function (error) console.log ('error is', error);); 

    Sla de bovenstaande wijzigingen op en start de server opnieuw. Log in en ga naar Voeg bericht toe pagina en voeg een bericht toe met een tag geselecteerd. U zult het nieuwe bericht opgeslagen en vermeld hebben. Klik op de knop Bewerken om de postdetails en tag te bewerken. 

    Inpakken

    In deze zelfstudie zag u hoe u de tag-pagina invoegt. U hebt het tagveld toegevoegd aan de pagina voor het toevoegen van berichten, samen met titel- en onderwerpvelden. 

    Ik hoop dat je deze instructiereeks leuk vond. Laat ons uw mening, suggesties of eventuele correcties in de opmerkingen hieronder weten.

    Broncode van deze tutorial is beschikbaar op GitHub.