#javascript #json #reactjs
#javascript #json #reactjs
Вопрос:
У меня есть требование показать HTML-шаблон, обслуживаемый из JSON API, с пользовательскими тегами на нем. Эти пользовательские теги должны быть заполнены другим объектом JSON. Пожалуйста, помогите.
Я могу заполнить HTML-код на странице, но не могу связать пользовательскую переменную со значением JSON в ней.
Например:
import React, { useEffect, useState } from 'react';
import axios from 'axios';
import ReactHtmlParser from 'react-html-parser';
const DynamicContainer = () => {
const [result, setResult] = useState([]);
let HTML3 = '';
let title = '';
useEffect(() => {
axios.get(`http://localhost:3000/data`)
.then(res => {
setResult({
jsonContent:res.jsonContent,
jsonHtml:res.jsonHtml
})
})
.catch(error => {
console.log(error);
setResult({error})
});
}, []);
if(result != "") {
title = result.jsonContent.title
HTML1 = result.jsonHtml;
}
return (
<div>
{ReactHtmlParser(HTML1)}
</div>
//<div className="" dangerouslySetInnerHTML={{ __html: result.jsonHtml}}></div>
)
}
export default DynamicContainer;
/Формат / JSON (
несколько похож на этот формат JSON, имеющий HTML-шаблон и значение JSON
Это в моем локальном, в производстве, будет 2 API, обслуживающих HTML и JSON.
) :
{
[
"jsonHTMl":{
"<div class="card "><h1>${title}</h1></div>"
},
"jsonContent": {
"title": "Hello World"
}
]
}
……………. Новый API…………….
У меня есть один HTML-шаблон, который подается из API, и несколько значений массива для заполнения в одной и той же структуре HTML. Как справиться с этим в react js.
{
"all_events": [
{
"events_value":[
{
"event_id": 100,
"title": "Webinar Professionals's Tech Stack",
"image": "../assets/webinar.png",
"date": "12/02/2021",
"description":"Dummy text is text that "
},
{
"event_id": 101,
"title": "Boy and Girl Website",
"image": "../assets/webinar.png",
"date": "22/03/2021",
"description":"If the distribution of "
}
],
"events_template":["<div class="card shadow-sm" id=${event_id}>n<img src=${image} class="img-fluid mw-md-150 mw-lg-130 mb-6 mb-md-0" alt="..." />n<div class="card-body">n<h3 class="card-text">${title}</h3>n<p class="card-text">On ${date}</p>n<p class="card-text">${description}</p>n<div class="text-center">n<a href="/event/${event_id}" className='mt-4 btn btn-primary'>n Detailsn</a>n</div>n</div>n</div>"]
}
]
}
Комментарии:
1. Не могли бы вы опубликовать некоторый URL-адрес сервера для извлечения данных. Мы не можем извлекать данные из: localhost:3000/data
Ответ №1:
у Lodash есть простой шаблон шаблонизатора.
const compiled = _.template(result.jsonHtml);
const html = compiled(result.jsonContent)
Для нового api
data["all_events"].forEach(events => {
const templates = events["events_template"];
const values = events["events_value"];
templates.forEach(template => {
values.forEach(value => {
const compiled = _.template(template);
const html = compiled(value)
// html is the processed result. Perhaps you want collect them to an array?
})
})
})
Вот ссылка на изолированную среду.
Комментарии:
1. Как загрузить приведенный выше код, если json содержит массив значений. Как использовать цикл, подобный ForEach и т. Д..
2. Пожалуйста, приведите пример.
3. Что-то похожее на приведенный выше код react. Один шаблон и массив значений.. API выглядит следующим образом: { «all_events»: [ { «events_value»:[ { «event_id»: 100, «title»: «Вебинар», «дата»: «12/02/2021» } { «event_id»: 102, «title»: «Вебинары профессионалов», «date»: «27/05/2021» } ], «events_template»:[«<div id=${event_id}>n<div class=»card-body»>n<h3 class= «card-text»>${title}</h3>n<pclass=»card-text»>В ${date}</p>n</div>»] } ] }
4. Пожалуйста, отредактируйте вопрос в более удобочитаемом формате.
5. Привет @vipcxj — извините за проблему с форматом. Я обновил область вопросов новыми деталями API. Код react остается тем же или может изменяться