【问题标题】:React Developer Tools says 'Proxy Component' instead of the name of the componentReact 开发人员工具显示“代理组件”而不是组件的名称
【发布时间】:2016-05-29 23:28:04
【问题描述】:

我正在使用WebpackHot 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']
      }
    ]
  }
};

【问题讨论】:

    标签: reactjs webpack webpack-hmr webpack-hot-middleware


    【解决方案1】:

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

    编辑

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

    【讨论】:

    • 你确定吗?你能粘贴你的 webpack 配置文件吗?
    • 当然,我已将其添加到问题的末尾。
    【解决方案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),
    };
    

    【讨论】:

    • 有趣。这确实适用于控制台中的警告消息,但不适用于 React 开发者工具。
    • 我不确定可能是什么问题,请检查这是否有帮助:github.com/facebook/react-devtools/issues/…
    • 我最终浏览了每一个文件并给每一个组件一个显示名称(看起来很乏味.. 有没有一个 webpack 插件呢?)并且它起作用了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-02-08
    • 2022-11-15
    • 2017-09-13
    • 1970-01-01
    • 2010-10-25
    • 2021-12-22
    • 2014-08-06
    • 1970-01-01
    相关资源
    最近更新 更多