Dans le cadre de mes efforts en cours pour apprendre ReactJS que je développe une simple page qui produira une liste des tendances comme suit:Erreur lors de la conversion d'une chaîne à l'objet JSON dans l'application ReactJS
En cliquant sur le bouton "Get Trends" la liste des tendances est récupérée à partir d'un serveur back-end sur websockets et affichée. Cela fonctionne comme prévu. Ci-dessous le code source correspondant:
import React, { Component } from 'react';
import './App.css';
class TrendRow extends Component {
render() {
return (
<tr>
<td>{this.props.onerow}</td>
</tr>
);
}
}
class TrendTable extends Component {
render() {
var rows = [];
for (var i=1; i<3; i++) {
rows.push(<TrendRow key={i} onerow={this.props.trends[i]}/>);
}
return (
<table>
<thead>
<tr>
<th>List of Trends</th>
</tr>
</thead>
<tbody>{rows}</tbody>
</table>
);
}
}
class App extends Component {
constructor() {
super();
this.state = {
ws: new WebSocket('ws://localhost:8025/websockets/TwitterWSService'),
getTrendsqueryString: 'GETTRENDS',
listoftrends: ['{"trend":"#Default","id":"0"}']
};
this.handleOnClick = this.handleOnClick.bind(this);
}
handleOnClick = (event) => {
this.state.ws.send(this.state.getTrendsqueryString);
this.state.ws.onmessage = (event) => {
this.setState(prevState => ({listoftrends: prevState.listoftrends.concat(event.data)}));
}
}
render() {
return (
<div>
<button onClick={this.handleOnClick}>Get Trends</button>
<TrendTable trends={this.state.listoftrends} />
</div>
);
}
}
export default App;
Maintenant, lorsque je tente de convertir la chaîne JSON affichée dans un objet JSON en utilisant « JSON.parse » je reçois différents types d'erreurs en fonction de là où je l'analyse syntaxique.
Si je Parse comme indiqué ci-dessous,
class TrendRow extends Component {
render() {
var jsonobject = JSON.parse(this.props.onerow);
return (
<tr>
<td>{jsonobject}</td>
</tr>
);
}
}
Je reçois l'erreur suivante:
"SyntaxError: Unexpected token u in JSON at position 0
...
var jsonobject = JSON.parse(this.props.onerow);
..."
Une recherche rapide sur Google pour le message d'erreur renvoyé la discussion qui suit, mais ce n'est pas très clair comment appliquer la solution à mon cas d'utilisation:
uncaught syntaxerror unexpected token U JSON
Je comprends que l'erreur est due à la valeur 'this.props.onerow' n'étant pas définie pendant le rendu initial et JSON.parse() essayant d'analyser cet objet. Même l'initialisation de l'objet "listoftrends" avec une chaîne par défaut ne résout pas l'erreur.
Si d'autre part, je JSON.parse(), comme indiqué ci-dessous,
handleOnClick = (event) => {
this.state.ws.send(this.state.getTrendsqueryString);
this.state.ws.onmessage = (event) => {
var jsonobject = JSON.parse(event.data);
this.setState(prevState => ({listoftrends: prevState.listoftrends.concat(jsonobject)}));
}
}
Je reçois le message d'erreur:
Objects are not valid as a React child...
recherche Google me mène un autre trou de lapin! Quelqu'un pourrait-il me fournir d'autres solutions?
J'apprécie vraiment que vous donniez une réponse détaillée. C'était un trésor d'informations et il me faudra du temps pour tout assimiler. Ma page se charge maintenant avec la liste des tendances comme prévu. J'ai un commentaire cependant: J'ai utilisé la boucle pour pour sélectionner un sous-ensemble des tendances en utilisant une variable compteur sélectionné par l'utilisateur. J'essaie toujours de comprendre comment utiliser la carte et les capacités de filtrage pour y parvenir. Si c'est trivial ne vous embêtez pas à commenter et j'espère pouvoir le comprendre moi-même. –