#javascript #reactjs
#javascript #reactjs
Вопрос:
Я пытаюсь заставить встраиваемый html-скрипт электронной коммерции работать в React, отображая его из компонента. Пример ниже:
<div data-embed="store">
<script type="application/json">
{"some json text"}
</script>
</div>
<script async src="https://website.com/loader.js"></script>
Из того, что я смог собрать, я могу использовать хук useEffect, но не смог заставить его работать правильно.
Ответ №1:
Вы можете сделать это useEffect
, создав script
элемент, добавив src
атрибут async
and и добавив его в тело документа. После этого импортированный JS будет доступен по всему миру. РЕДАКТИРОВАТЬ: то же самое можно применить к JSON, за исключением необходимости загружать его вручную.
const [json, setJson] = useState(null);
useEffect(() => {
const script = document.createElement('script');
script.src = "https://website.com/loader.js";
script.async = true;
document.body.appendChild(script);
// json
const jsonScript = document.createElement('script');
jsonScript.innerHTML = `
{
"greeting": "hello"
}
`;
jsonScript.id = 'json';
jsonScript.type = 'application/json';
document.body.appendChild(jsonScript);
setJson(JSON.parse(document.getElementById('json').innerHTML));
}, []);
Комментарии:
1. Это имеет смысл, я думаю, как мне получить тег script, который завернут в div, для использования указанного встроенного объекта JSON?
2. JSON загружается не так, как JS, поэтому вам придется проделать немного дополнительной работы. Это включает в себя получение и синтаксический
innerHTML
анализ и установку его в собственное состояние. Я отредактировал ответ с примером этого.3. Большое вам спасибо, я просто пытаюсь все это понять. Я также вставил код и разместил innterHTML и src. Я думаю, вопрос в том, должен ли я создать div с classname / id для отображения скрипта thios?