【发布时间】:2020-11-02 10:58:13
【问题描述】:
我正在尝试使用完全有效的 JSX 在 React 中呈现一个按钮(至少,据我观察 20 分钟后的判断)。但由于某种原因,我不断收到语法错误:
第 18 行出现意外的标记“
考虑到当我加载脚本时我都使用 text/babel 类型属性,并且 babel 脚本加载在 <head> 中,而这个脚本加载到 DOM 中,这让我感到惊讶。
这是我的 HTML 的样子:
<head>
<!-- react, react-dom, axios etc. go here !-->
<script crossorigin src="https://unpkg.com/babel-standalone@6.26.0/babel.min.js"></script>
</head>
<body>
<div id="content"></div>
<!-- notice that i'm using babel !-->
<script type="text/babel" src="cdn/static/scripts/module/user.js">
</body>
这是我的 JavaScript:
class User extends Component{
constructor(props){
super();
this.user = props.user;
this.state = {
modalOpen: false
};
}
Button = () => {
let user = this.user;
// vvvv this is what the error points to
return <button className={(user.loggedIn ? "user" : "sign-in")}>{(user.loggedIn ? user.public.display : "Sign In")}</button>;
}
render(){
return (
<div className="button">
<this.Button />
</div>
);
}
}
ReactDOM.render(<User user={window.User} />, document.getElementById("content"));
更奇怪的是,它实际上会渲染button,但是因为有错误,它也会导致我其余的JavaScript中断。
我以前从未遇到过这个问题,因此感谢所有帮助,干杯。
【问题讨论】:
-
按钮是一个函数而不是一个组件,尝试
{this.button()}而不是<this.Button />来执行这个函数。 -
@theblackgigant
<this.Button />是一个匿名功能组件,在我的所有其他脚本中呈现正常。还应该补充一点,改变它不会消除我的错误。 :-( -
不要按照建议执行
this.Button(),您必须使用createElement才能将其注册到 React 树。
标签: javascript html reactjs