Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript webpack/react/babel不编译JSX_Javascript_Reactjs_Webpack_Babeljs - Fatal编程技术网

Javascript webpack/react/babel不编译JSX

Javascript webpack/react/babel不编译JSX,javascript,reactjs,webpack,babeljs,Javascript,Reactjs,Webpack,Babeljs,我知道有很多类似的问题,但我没有找到解决方案,其中一些问题很老,所以不适用 我已经为react创建了一个Web包环境,但没有编译JSX语法 我正在使用: "@babel/core": "^7.1.6", "@babel/preset-env": "^7.1.6", "@babel/preset-react": "^7.0.0", "react": "^16.7.0", "react-dom": "^16.7.0", 在我的babel.config.js中,我有: ... 'preset

我知道有很多类似的问题,但我没有找到解决方案,其中一些问题很老,所以不适用

我已经为react创建了一个Web包环境,但没有编译JSX语法

我正在使用:

"@babel/core": "^7.1.6",
"@babel/preset-env": "^7.1.6",
"@babel/preset-react": "^7.0.0",
"react": "^16.7.0",
"react-dom": "^16.7.0",
在我的babel.config.js中,我有:

  ...
  'presets': [
    [
      '@babel/preset-env',
      {
        'targets': {
          'chrome': 61,
        },
        'modules': false,
        'useBuiltIns': 'usage'
      },
      '@babel/preset-react'
    ]
  ],
  ...
我可以编译如下代码:

import React from 'react'
import ReactDOM from 'react-dom'
require('./scss/main.scss')

const e = React.createElement

class LikeButton extends React.Component {
  constructor (props) {
    super(props)
    this.state = {
      liked: false
    }
  }

  render () {
    if (this.state.liked) {
      return 'You liked this.'
    }

    return e(
      'button',
      {
        onClick: () => this.setState({
          liked: true
        })
      },
      'Like'
    )
  }
}

const domContainer = document.querySelector('#like_button_container')
ReactDOM.render(e(LikeButton), domContainer)
presets: [
  ["@babel/preset-env", {...}],
  "@babel/preset-react",
]
但是当我尝试使用JSX时

const name = 'Name';
const element = <h1>Hello, {name}</h1>;

ReactDOM.render(
  element,
  document.getElementById('root')
);
它抱怨代码中的const元素不是有效的React组件。 您需要返回一个函数,并始终以大写字母开头组件名称

// Always import React at the top of the file!
import React from 'react';

function Person(props) {
  return <h1>Hello, {props.name}</h1>;
}

const element = <Person name="Name of the person" />;

ReactDOM.render(
  element,
  document.getElementById('root')
);
有关组件的详细信息:代码中的const元素不是有效的React组件。 您需要返回一个函数,并始终以大写字母开头组件名称

// Always import React at the top of the file!
import React from 'react';

function Person(props) {
  return <h1>Hello, {props.name}</h1>;
}

const element = <Person name="Name of the person" />;

ReactDOM.render(
  element,
  document.getElementById('root')
);
关于组件的更多信息:

将@babel/preset-react移到@babel/preset-env配置之外,将其移到阵列之外,如下所示:

import React from 'react'
import ReactDOM from 'react-dom'
require('./scss/main.scss')

const e = React.createElement

class LikeButton extends React.Component {
  constructor (props) {
    super(props)
    this.state = {
      liked: false
    }
  }

  render () {
    if (this.state.liked) {
      return 'You liked this.'
    }

    return e(
      'button',
      {
        onClick: () => this.setState({
          liked: true
        })
      },
      'Like'
    )
  }
}

const domContainer = document.querySelector('#like_button_container')
ReactDOM.render(e(LikeButton), domContainer)
presets: [
  ["@babel/preset-env", {...}],
  "@babel/preset-react",
]
@对于预设,babel/preset react应该与@babel/preset env处于同一级别。将@babel/preset react移动到@babel/preset env配置之外,如下所示:

import React from 'react'
import ReactDOM from 'react-dom'
require('./scss/main.scss')

const e = React.createElement

class LikeButton extends React.Component {
  constructor (props) {
    super(props)
    this.state = {
      liked: false
    }
  }

  render () {
    if (this.state.liked) {
      return 'You liked this.'
    }

    return e(
      'button',
      {
        onClick: () => this.setState({
          liked: true
        })
      },
      'Like'
    )
  }
}

const domContainer = document.querySelector('#like_button_container')
ReactDOM.render(e(LikeButton), domContainer)
presets: [
  ["@babel/preset-env", {...}],
  "@babel/preset-react",
]

@babel/preset react应该与@babel/preset env处于相同的预设级别顶层。

除非有非常令人信服的理由不使用,否则只使用@ChrisG不使用CLI可以更深入地了解整个框架,并允许调整某些选项。了解CLI隐藏的整个过程非常有价值。@ChrisG不使用create-react应用程序的一个令人信服的理由是,它可以帮助您真正了解引擎盖下发生的事情。在使用工具将基础知识从你身边抽象出来之前,最好先学习这些基础知识。OP您是否在webpack.config.js中添加了JSX加载程序?您需要一个来告诉tranpsile.jsxfiles@Jayce444它应该包含在@babel/preset env中,不是吗?除非有非常令人信服的理由不使用,否则只使用@ChrisG不使用CLI可以更深入地了解整个框架,并允许调整某些选项。了解CLI隐藏的整个过程非常有价值。@ChrisG不使用create-react应用程序的一个令人信服的理由是,它可以帮助您真正了解引擎盖下发生的事情。在使用工具将基础知识从你身边抽象出来之前,最好先学习这些基础知识。OP您是否在webpack.config.js中添加了JSX加载程序?您需要一个来告诉tranpsile.jsxfiles@Jayce444它应该包含在@babel/preset env中,不是吗?好的,我知道这种方式,但是文档说我也可以用另一种方式来使用JSX示例,我知道这种方式,但是文档说我也可以用另一种方式来使用JSX示例