5

我正在Webpack使用Hot Module Reloading. 我还在开发时使用 chrome 扩展React Developer Tools来检查反应树。当我检查页面并查看组件树时,我想查看实际组件的名称,但是,对于每个组件,名称都显示为Proxy Component.

我可以让你知道更多关于我的细节Webpack,但我什至在谷歌上努力寻找正确的东西来解决这个问题。

以下是我用于 webpack 的工具:

"webpack": "^1.9.6",
"webpack-dev-middleware": "^1.2.0",
"webpack-dev-server": "^1.14.1",
"webpack-hot-middleware": "^2.0.0"

webpack.config.js

var path = require('path');
var webpack = require('webpack');

module.exports = {
  devtool: 'eval',
  entry: [
    'webpack-hot-middleware/client',
    './client/index'
  ],
  output: {
    path: path.join(__dirname, 'static'),
    filename: 'bundle.js',
    publicPath: '/static/'
  },
  plugins: [
    new webpack.HotModuleReplacementPlugin(),
    new webpack.NoErrorsPlugin()
  ],
  module: {
    loaders: [
      {
        test: /\.json$/,
        loader: 'json'
      },
      {
        test: /\.js$/,
        loader: 'babel-loader',
        include: path.join(__dirname, 'client'),
        query: {
          plugins: ['transform-runtime'],
          presets: ['es2015', 'stage-0', 'react', 'react-hmre']
        }
      },
      {
        test: /\.scss$/,
        loaders: ['style', 'css', 'sass']
      }
    ]
  }
};
4

2 回答 2

4

我认为这是因为您应该将节点环境变量设置为“生产”。在生产模式下,React 会重命名您的组件,并且它们在 React 开发者工具中显示为 ProxyComponent。

编辑

您的问题在于热模块更换和 React Transform。正如Dan Abramov本人所说,在使用热重载进行 React 时,组件需要被代理,并且被代理组件的显示名称是从displayName您的组件派生的。这就是为什么当你添加一个显式的时候它会起作用displayName,如果你不这样做,React devtools 将回退到ProxyComponent模块的名称 : ProxyComponent

于 2016-06-03T09:05:00.587 回答
2

您是否尝试过分配displayName财产?

export const Navbar = (props) => {
  let title = null;
  let menu = null;

  return (
    <header className={style.navbar}>
      <Grid>
        <Row>
          <Col xs={12} sm={12} md={12} lg={12}>
            {title}
            {menu}
          </Col>
        </Row>
      </Grid>
    </header>
  );
};

Navbar.displayName = 'Navbar'; // LIKE THIS

Navbar.propTypes = {
  title: PropTypes.string,
  items: PropTypes.arrayOf(PropTypes.node),
};
于 2016-06-01T22:04:30.703 回答