Я не могу заставить ReactDOM.render (...) принять любой тег JSX, однако, если я использую React.createElement (...), это работает.
Это мой index.jsx файл:
import React from "react";
import ReactDOM from "react-dom";
// THIS WORKS!
//var elem = React.createElement('h1',{},"Hello");
//ReactDOM.render(elem, document.getElementById("content"));
// THIS DOESN'T WORK!
ReactDOM.render(<h1>Hello World!</h1>, document.getElementById("content"));
В файле index.html есть div с содержимым id = ""где-то.
Это мой package.json файл:
{
"name": "static",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "webpack -p --progress --config webpack.config.js",
"dev-build": "webpack --progress -d --config webpack.config.js",
"watch": "webpack --progress -d --config webpack.config.js --watch"
},
"author": "",
"license": "ISC",
"devDependencies": {
"@babel/preset-env": "^7.4.5",
"@babel/preset-react": "^7.0.0",
"webpack": "^4.35.0",
"webpack-cli": "^3.3.5"
},
"presets": [
"@babel/preset-env",
"@babel/preset-react"
]
}
Это мой webpack.config.js файл:
const webpack = require('webpack');
const config = {
entry: __dirname + '/js/index.jsx',
output: {
path: __dirname + '/dist',
filename: 'bundle.js',
},
resolve: {
extensions: ['.js', '.jsx', '.css']
},
};
module.exports = config;
module: {
rules: [
{
test: /\.jsx?/,
exclude: /node_modules/,
use: 'babel-loader'
}
]
}
Ошибка Я получаю:
ERROR in ./js/index.jsx 11:16
Module parse failed: Unexpected token (11:16)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
|
|
> ReactDOM.render(<h1>Hello World!</h1>, document.getElementById("content"));
|
=============================================
Решение:
1-й из всех webpack.config.js неверно (см. Принятый ответ).После этого мне пришлось установить babel-loader с npm install -D babel-loader @babel/core @babel/preset-env webpack
, а затем создать файл .babelrc по тому же пути, что и другой конфиг.файлы с содержанием:
{
"presets": ["@babel/preset-env", "@babel/preset-react"]
}