edit (répandu): Pour muter les objets, tout ce que je devais faire était J'espère que cela aide les autres personnes qui n'ont pas muté d'objet API JSON avant de l'enregistrer dans un état de réaction ! P> Q: J'ai un service de raclage Web Crossing STRY> LinkedIn Profile messages de 6 entreprises différentes. P> J'utilise la réponse JSON de ce service Pour rendre un flux de nouvelles de tous les messages dans un composant réactif. P> Je souhaite ajouter une propriété Nom de la société à chacun des objets de poste de la société LinkedIn comme ils n'en ont pas déjà. P> https://codesandbox.io/s/adding-propertys -à-JSON-Response-2x1ym - C'est ce que j'essaie de faire. Je voudrais définir le nom de la société dans la fonction SetState. P> P>
3 Réponses :
Vous pouvez créer un objet / carte dans lequel les URL uniques sont des clés et des noms de sociétés sont des valeurs, par exemple
p>
const mapping = {
"https://some-url-1": "Company Name 1",
"https://some-url-2": "Company Name 2",
}
axios
.get(
"https://phantombuster.s3.amazonaws.com/YRrbtT9qhg0/3jhBGwtSbaEV6lqijSmpoQ/result.json"
)
.then(response => {
this.setState({
posts: response.data.filter(d => d.postContent && d.imgUrl)
.map(item => {
const name = mappings[item.url];
return { ...item, name };
});
});
}) Vous pouvez résoudre rapidement cela en obtenant l'URL de la société de leur réponse, comme ceci: Cependant, je pense que vous devrez appeler une autre de leurs API pour obtenir des noms d'entreprise basés sur les identifiants ou les itinéraires. p> p>
Ce n'est pas une mauvaise idée, j'avais pensé à cela. Mais je voulais plutôt ajouter mes propres biens.
Oui, mais je pense que cela serait plus sûr d'obtenir la chaîne actuelle du nom de la société de l'API de LinkedIn comme itinéraire pourrait être ancienne et que la société aurait pu changer de nom à autre chose.
Vous pouvez utiliser ProfileRL CODE> et certains REGEXP pour formater le nom de la société à partir de l'URL: private getProfilesPosts() {
axios
.get(
"https://phantombuster.s3.amazonaws.com/YRrbtT9qhg0/3jhBGwtSbaEV6lqijSmpoQ/result.json"
)
.then(response => {
this.setState({
// TODO: Set a company name property for each linkedin post object
// TODO: There are 6 different companys
// TODO: The unique propertys to check which company the post belongs to is by the profileUrl property
// i.e profileUrl: "https://www.linkedin.com/company/..." or profileUrl: "https://www.linkedin.com/company/..."
posts: response.data.filter(d => d.postContent && d.imgUrl).map(post => {
return {
...post,
companyName: post.profileUrl
.match(/\/company\/(.*)/)[1]
.replace('-', ' ')
.split(' ')
.map(v => v.charAt(0).toUpperCase() + v.slice(1))
.join(' ')
}
})
});
})
// Error catching
.catch(errors => this.setState({ errors }));
}
Je vais l'accepter comme la bonne réponse que je l'ai ajustée pour faire ce dont j'avais besoin. J'ai utilisé une instruction IF pour vérifier les URL, puis une variable de nom de société à l'orthographe correcte de chaque entreprise au lieu de la regex :)
Vous parlez simplement de manipuler un objet. Il n'a pas grand-chose à faire avec React ou Json. Qu'avez-vous essayé? Qu'est-ce qui ne fonctionne pas? Vous devez afficher le code ici i>.
Comment vous savez quelle entreprise appartient à chaque poste? Où obtiendrez-vous les noms des entreprises?
Pédanterie non sollicitée: "Sociétés" et "Propriétés"
Je sais que j'ai besoin de créer une instruction IF / Switch pour vérifier si la propriété ProfilurL correspond à l'un des 6 ProfilurL ProfileLs sur la réponse JSON @christoslytras puis crée un nom de société de propriétés pour chacun ... Je suis tout simplement neuf à OOP, mon Le fond est principalement des conceptions Web.