#javascript #reactjs
#javascript #reactjs
Вопрос:
Я следую инструкциям по этой ссылке. https://reactjs.org/docs/add-react-to-a-website.html
У меня есть следующий код, и он работает:
const domContainers = document.querySelectorAll('[name="uiattr"]');
domContainers.forEach((element) => {
const id = element.id.split("-")[1];
ReactDOM.render(e(LikeButton), element);
});
Если я изменю его на этот код и добавлю к нему асинхронность:
const domContainers = document.querySelectorAll('[name="uiattr"]');
domContainers.forEach(async (element) => {
const id = element.id.split("-")[1];
const attr = await getAttr(id);
ReactDOM.render(e(LikeButton), element);
});
я получаю следующую ошибку в консоли ни с чем другим: Не удалось разрешить спецификатор модуля «babel-runtime / regenerator»
Я установил bable следующим образом: npm install babel-cli@6 babel-preset-react-app@3
и я развертываю с помощью этой команды: js-dev$ npx babel --watch src --out-dir ../prj/static/prj/js/ --presets react-app/prod
Я новичок в вавилонском мире, предполагаю, что мне нужно что-то еще, но понятия не имею. Я предполагаю, что синтаксис правильный, только потому, что он компилируется без ошибок. Что-то, что я видел, когда babel терпел неудачу, когда я ошибался.
Комментарии:
1. есть решение? У меня такая же проблема после выполнения руководства.
Ответ №1:
Руководство по реагированию действительно очень запутанное и не охватывает все аспекты.
Я бы предложил просто установить react
amp; react-dom
: npm install --save react react-dom
Вам нужно webpack
будет объединить ваш код и babel
пару плагинов для компиляции вашего JSX, использовать асинхронные функции, …: npm install --save-dev @babel/core @babel/preset-env @babel/preset-react @babel/plugin-transform-runtime babel-loader webpack webpack-cli
.
Создайте webpack.config.js
файл в своей корневой папке:
const path = require('path');
module.exports = {
mode: "development", // or production
entry: {
app1: './react/app1/index.js'
},
watch: true,
output: {
filename: "[name].js",
path: path.join(__dirname, "public/react")
},
module: {
rules: [
{
test: /.js$/,
exclude: /node_modules/,
use: {
loader: "babel-loader",
}
}
]
}
};
Создайте .babelrc
файл в своей корневой папке:
{
"presets": ["@babel/preset-env", "@babel/preset-react"],
"plugins": ["@babel/plugin-transform-runtime"]
}
Пример react/app1/index.js
файла:
import React from "react";
import ReactDOM from "react-dom";
import App from "./App";
ReactDOM.render(<App />, document.getElementById("myContainer"));
Напишите свой код react./react/app1/index.js (вы можете импортировать другие файлы React, модули, …)
Затем в вашем html просто поместите тег script: <script src="public/react/app1.js"></script>