繁体   English   中英

React组件未在DOM上呈现

[英]React component not rendering on DOM

我正在浏览http://andrewhfarmer.com/build-your-own-starter/#0-intro上的React教程,并且Counter组件不会显示在页面上。 html出来像这样:

<html>
<head>
    <script src="/bundle.js" ></script>
</head>
<body>
    <div id="mount"></div>
</body>
</html>

main.js

console.log('Hello World!');
import React from 'react';
import ReactDOM from 'react-dom';
import Counter from './Counter';


ReactDOM.render(
    React.createElement(Counter),
    document.getElementById('mount')
);

Counter.js

import React from 'react';


class Counter extends React.Component {
    constructor() {
        super();
        this.state = {
            count: 0,
        };
    }

    render() {
        return (
            <button
                onClick={() => {
                    this.setState({ count: this.state.count + 1 });
                }}
            >
                Count: {this.state.count}
            </button>
        );
    }
}

export default Counter;

webpack.config.js

var path = require('path');

var config = {
  context: path.join(__dirname, 'src'),
  entry: [
    './main.js',
  ],
  output: {
    path: path.join(__dirname, 'www'),
    filename: 'bundle.js',
  },
  module: {
    loaders: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loaders: ['babel-loader'],
      },
    ],
  },
  resolveLoader: {
    root: [
      path.join(__dirname, 'node_modules'),
    ],
  },
  resolve: {
    root: [
      path.join(__dirname, 'node_modules'),
    ],
  },
};
module.exports = config;

我们运行服务器:

cchilders@cchilders-Latitude-E7240:~/CodeTutorials/build-react-starter$ node server.js 
in the component
in the tester
in the component
in the tester
Example app listening at http://:::3000
Hash: d51a7c75081bea020fb1
Version: webpack 1.14.0
Time: 1297ms
    Asset    Size  Chunks             Chunk Names
bundle.js  744 kB       0  [emitted]  main
chunk    {0} bundle.js (main) 707 kB [rendered]
    [0] multi main 28 bytes {0} [built]
 [179] ./src/Counter.js 2.63 kB {0} [built]
webpack: bundle is now VALID.

刷新页面在终端中什么也没有显示,但是开发人员工具控制台显示了Hello World! 每次刷新

似乎模板没有被渲染,但是我的朋友最后一次按原样进行教程时(中间件的public方面可能已经提供了模板)

为什么此服务器不提供/文件?

该代码位于https://bitbucket.org/servandoavila1/codetutorials

谢谢

无需使用document.addEventListener('DOMContentLoaded', function() {

 class Counter extends React.Component { constructor() { super(); this.state = { count: 0, }; } render() { return ( <button onClick={() => { this.setState({ count: this.state.count + 1 }); }} > Count: {this.state.count} </button> ); } } ReactDOM.render( React.createElement(Counter), document.getElementById('mount') ); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> <div id="mount"></div> 

您什么时候上次运行npm run compile

我只是自己完成了本教程,遇到了与您同样的问题。 添加React内容后,我可以通过再次运行npm run compile来解决它。

看来本教程可能缺少一步,因为添加React之后需要再次编译bundle.js。

尝试在您的webpack配置上设置publicPath

var config = {
  ...
  output: {
    path: path.join(__dirname, 'www'),
    publicPath: '/',
    filename: 'bundle.js',
  },
  ...
}

并确保您有['es2015', 'react']您预设.babelrc

提示:在main.js上,您可以这样做

ReactDOM.render(
    <Counter />,
    document.getElementById('mount')
);

在loader.config.js文件中使用JSX加载器,如下所示:

loaders: [
     {
        test: /\.jsx?$/,
        exclude: /node_modules/,
        loader: 'babel-loader',

        query: {
           presets: ['es2015', 'react']
        }
     }
  ]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM