reactjs - 为什么我在 React 中返回时需要一个额外的包装器?
问题描述
所以,我开始学习 React,遇到了这段代码,我真的很困惑。
以下代码给出错误:
function getNum() {
return Math.floor(Math.random() * 10 + 1);
}
class Number extends React.Component {
render() {
const num = getNum();
let msg;
if (num % 2 == 0) {
msg = (
<div>
<h2>Even Number</h2>
<p>The number is: {num}</p>
</div>
);
} else {
msg = (
<div>
<h2>Odd Number</h2>
<p>The number is: {num}</p>
</div>
);
}
// THIS IS WHAT CAUSES ERROR
return {msg};
}
}
ReactDOM.render(<Number />, document.getElementById("root"));
但是,如果我将返回值包装在这样的 div<div>{msg}</div>
中,错误就会消失。我很困惑为什么会这样?因为 msg 变量有一个父级,所以返回也有一个父级,那么为什么我需要那个额外的 div 容器?
解决方案
通过这样写,它被解释为一个带有单个键的对象,称为msg
. 无需包装 JSX 标签,您只需编写:
return msg;
当您需要运行 javascript 块或引用变量时,应在 JSX 标记中使用方括号。
推荐阅读
- reactjs - jsx使用不用导入react
- python - pandas:如何在一列上合并具有相同列名的多个数据框?
- javascript - 联系表格 Ajax、php、Jquery:
- android - 如何在 React-Native 中提取 Android 上的 cookie?
- cucumber - 使用jenkins在jira中上传黄瓜场景大纲的结果
- unit-testing - 对 influxdb 查询进行单元测试的最简单方法应该是什么
- python - 如何根据所有列的条件从熊猫数据框中排除行
- android - 需要 Android SDK 和 Android 应用程序的单一 Firebase 分析
- mysql - 我一直在寻找解决方案来获取 Mysql 中多列(单行)的总和,以获得每小时的电费发票总数?
- angular - 全局关闭材料 matInput 的自动完成功能