无法弄清楚反应应用程序中js和jsx之间的区别[重复]

Posted

技术标签:

【中文标题】无法弄清楚反应应用程序中js和jsx之间的区别[重复]【英文标题】:Unable to figure out difference between js and jsx in react app [duplicate] 【发布时间】:2021-11-10 03:32:55 【问题描述】:

我有使用 npx create-react-app 和默认扩展应用程序创建的 react 项目 is.js ,它的工作方式与我将其转换为 .JSX 时相同。我是 React 的新手,我读过 JSX 更简单,但这里的 js 和 jsx 都是一样的。

【问题讨论】:

这能回答你的问题吗? ***.com/questions/46169472/reactjs-js-vs-jsx 这能回答你的问题吗? ReactJS - .JS vs .JSX 【参考方案1】:

您可以将 JSX 视为某种 javascript,它允许您将 html 放入其中。 通常,当您编写这样的 JSX 代码时,它会在后台转换为等效的 javascript 例如

JSX

const Head =  () => (<h1> Hello Wordl </h2>)

Javascript 等效项

const Head = React.createElement('h1', , "Hello world")

React.createElement(tagsorComponent, attriborProps, ArraychildrenComponentOrTagsOfStrings)

第一个参数可以接受一个元素标签或另一个组件作为 React.createElement

第二个参数接受子组件的 prop 或 ids 等属性,

第三个参数接受一串标签或子组件

想象一下,你用 javascript 编写所有东西,你可能有一些看起来像这样的东西

const Pet = () => 
  return React.createElement("div", , [
    React.createElement("h1", , "Luna"),
    React.createElement("h2", , "Dog"),
    React.createElement("h2", , "Havanese"),
  ]);
;

const App = () => 
  return React.createElement("div", , [
    React.createElement("h1", , "Adopt Me!"),
    React.createElement(Pet),
    React.createElement(Pet),
    React.createElement(Pet),
  ]);
;

ReactDOM.render(React.createElement(App), document.getElementById("root"));

但是使用 JSX 你可以简单地这样做

const Pet = (props) => 
  return (
    <div>
      <h1>props.name</h1>
      <h2>props.animal</h2>
      <h2>props.breed</h2>
    </div>
  );
;

const App = () => 
  return (
    <div>
      <h1>Adopt Me!</h1>
      <Pet name="Luna" animal="dog" breed="Havanese" />
      <Pet name="Pepper" animal="bird" breed="Cockatiel" />
      <Pet name="Doink" animal="cat" breed="Mix" />
    </div>
  );
;

render(<App />, document.getElementById("root"));

我认为你会更喜欢 JSX 而不是原始 js 等效

【讨论】:

感谢您的回复,但我的问题是,我在 app.js 文件中编写的代码与您在 jsx 中编写的代码相同,那么如果我的 app.js 具有扩展名 js 和我,为什么它可以工作我在里面写 jsx 语法。 在 app.js 被执行之前,它会被你的 babel.js 或任何转译器转换成纯 JavaScript。所以这不是问题。如果您尝试在浏览器控制台中编写 JSX,它将无法正常工作 Ab 的解释是可靠的。我要补充一点,命名文件以更正确地匹配其语法的好处之一是,它会增加 IDE 以更有意义的方式解析其内容或提供有关正确/错误语法和语义的更有意义的反馈的可能性。例如,如果您采用“.ts”和“.tsx”后缀约定,则鼓励您的 IDE 承担类型脚本支持并提供相应建议。

以上是关于无法弄清楚反应应用程序中js和jsx之间的区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Three.js:Lambert 和 Phong 之间的确切区别是啥?

我有一个想要实现的设计,但无法弄清楚 Android 中的方法

无法弄清楚为啥 docker compose up 没有运行我的 React JS 应用程序

我无法弄清楚如何防止在 Node.js 中出现此 CORS 错误 [重复]

反应页面之间的导航

express.js 中 app.use 和 app.get 的区别