我只是从Reactjs开始,正在编写一个简单的组件来显示
li
标签并遇到此错误:
意外的令牌“ <”
我在http://jsbin.com/UWOquRA/1/edit?html,js,console,output下面的jsbin中放置了示例
请让我知道我做错了。
我只是从Reactjs开始,正在编写一个简单的组件来显示
li
标签并遇到此错误:
意外的令牌“ <”
我在http://jsbin.com/UWOquRA/1/edit?html,js,console,output下面的jsbin中放置了示例
请让我知道我做错了。
Answers:
我使用type =“ text / babel”解决了它
<script src="js/reactjs/main.js" type = "text/babel"></script>
更新:在React 0.12+中,不再需要JSX编译指示。
确保在文件顶部包含JSX编译指示:
/** @jsx React.DOM */
如果没有这一行,jsx
二进制和浏览器内的转换器将使您的文件保持不变。
type="text/babel"
。勇闯javascript新世界
问题意外令牌'<'是因为缺少babel预设。
解决方案:您必须按以下方式配置Webpack配置
{
test : /\.jsx?$/,
exclude: /(node_modules|bower_components)/,
loader : 'babel',
query : {
presets:[ 'react', 'es2015' ]
}
}
.jsx在这里检查.js和.jsx格式。
您可以使用节点简单地安装babel依赖项,如下所示
npm install babel-preset-react
谢谢
npm install babel-preset-react
解决了我的问题。
.babelrc
仅在项目中有文件"presets": ["env", "react", "es2015"]
,就是这样!!
您需要将该JSX代码转换/编译为javascript或使用浏览器内转换程序
查看http://facebook.github.io/react/docs/getting-started.html并记下这些<script>
标记,您需要这些标记才能使JSX在浏览器中工作。
<script type="text/jsx">
,如果需要,请将整个代码粘贴到hastebin.org粘贴中
这是您的jsbin中的一个有效示例:
HTML:
<!DOCTYPE html>
<html>
<head>
<script src="//fb.me/react-with-addons-0.9.0.js"></script>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body>
<div id="main-content"></div>
</body>
</html>
jsx:
<script type="text/jsx">
/** @jsx React.DOM */
var LikeOrNot = React.createClass({
render: function () {
return (
<p>Like</p>
);
}
});
React.renderComponent(<LikeOrNot />, document.getElementById('main-content'));
</script>
从单个文件运行此代码,它应该可以工作。
为了正确解析标签,您需要使用以下babel版本:https : //cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.24/browser.js 和属性“ type ='text / babel'”在脚本中。此外,您的自定义脚本应位于“ body”标签内。
如果我们考虑您的实际站点配置,那么您需要先运行ReactJS
<!-- Babel ECMAScript 6 injunction -->
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
并将属性添加到您的js文件-type =“ text / babel”,例如
<script src="../js/r1HeadBabel.js" type="text/babel"></script>
那么下面的代码示例将起作用:
ReactDOM.render(
<h1>Hello, world!</h1>,
document.getElementById('root')
);
使用以下代码。我添加了对React和React DOM的引用。使用ES6 / Babel将您的JS代码转换为原始JavaScript。请注意,Render方法来自ReactDOM,并确保render方法具有在DOM中指定的目标。有时您可能会遇到render()方法找不到目标元素的问题。这是因为在DOM呈现之前执行了react代码。为了解决这个问题,使用jQuery ready()调用React的render()方法。这样,您将确定首先渲染DOM。您还可以在应用程序脚本上使用defer属性。
HTML代码:
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body>
<div id='main-content'></div>
<script src="CDN link to/react-15.1.0.js"></script>
<script src="CDN link to/react-dom-15.1.0.js"></script>
</body>
</html>
JS代码:
var LikeOrNot = React.createClass({
render: function () {
return (
<li>Like</li>
);
}
});
ReactDOM.render(<LikeOrNot />,
document.getElementById('main-content'));
希望这能解决您的问题。:-)
您可以使用如下代码:
import React from 'react';
import ReactDOM from 'react-dom';
var LikeOrNot = React.createClass({
displayName: 'Like',
render: function () {
return (
React.createElement("li", null, "Like")
);
}
});
ReactDOM.render(<LikeOrNot />, document.getElementById('main-content'));
并且不要忘记添加<div id='main-content'></div>
到body
您的html
但是,在package.json文件中,您应该使用以下依赖项:
"dependencies": {
...
"babel-core": "^6.18.2",
"babel-preset-react": "^6.16.0",
...
}
"devDependencies": {
...
"babel": "^6.5.2",
"babel-loader": "^6.2.7",
"babel-preset-es2015": "^6.18.0",
"jsx-loader": "^0.13.2",
...
}
这对我来说很有效,但我也使用了webpack,并提供了以下选项(放入webpack.config.js中):
module: {
loaders: [
{
test: /\.jsx?$/, // Match both .js and .jsx files
exclude: /node_modules/,
loader: "babel-loader",
query:
{
presets: ['es2015', 'react']
}
}
]
}
我React
今天才开始学习,面临同样的问题。以下是我编写的代码。
<script type="text/babel">
class Hello extends React.Component {
render(){
return (
<div>
<h1>Hello World</h1>
</div>
)
}
}
ReactDOM.render(
<Hello/>
document.getElementById('react-container')
)
</script>
如您所见,在使用之后,我错过了逗号(,)<Hello/>
。错误本身就是说我们需要看哪一行。
因此,一旦我在ReactDOM.render()
函数的第二个参数之前添加了逗号,所有功能就可以正常工作了。
这是您可以使用html的另一种方法
<head>
<title>Parcel Sandbox</title>
<meta charset="UTF-8" />
</head>
<body>
<div id="app"></div>
<script src="src/index.js"></script>
</body>
</html>
路径为src / index.js的index.js文件
import React from "react";
import { render } from "react-dom";
import "./styles.scss";
const App = () => (
<div>
<h1>Hello test</h1>
</div>
);
render(<App />, document.getElementById("app"));
使用此package.json将使您快速启动并运行
{
"name": "test-app",
"version": "1.0.0",
"description": "",
"main": "index.html",
"scripts": {
"start": "parcel index.html --open",
"build": "parcel build index.html"
},
"dependencies": {
"react": "16.2.0",
"react-dom": "16.2.0",
"react-native": "0.57.5"
},
"devDependencies": {
"@types/react-native": "0.57.13",
"parcel-bundler": "^1.6.1"
},
"keywords": []
}
虽然,我在.babelrc配置文件中安装了所有适当的babel加载器。这个带有parcel-bundler的构建脚本在手动刷新页面时在浏览器控制台中产生了意外的令牌错误<和mime类型错误。
"scripts": {
"build": "parcel build ui/index.html --public-url ./",
"dev": "parcel watch ui/index.html"
}
更新构建脚本为我解决了问题。
"scripts": {
"build": "parcel build ui/index.html",
"ui": "parcel watch ui/index.html"
}