React 中的类变量与 ES6

2024-02-23

这个问题可能已经在其他地方得到了回答,但在标记为重复之前,请帮助我解决这个问题。我指的是使用react和d3的以下codepen:https://codepen.io/swizec/pen/oYNvpQ https://codepen.io/swizec/pen/oYNvpQ

但是,我无法弄清楚这个 codepen 如何在没有任何关键字的情况下使用类中声明的变量:

class Colors extends Component {
 colors = d3.schemeCategory20;
  width = d3.scaleBand()
            .domain(d3.range(20));

   ....
}

当我尝试执行此代码时,出现以下错误:

./app/components/D3IndentedTree/Chloreophath.js
Module build failed: SyntaxError: Unexpected token (13:11)

  11 | // Draws an entire color scale
  12 | class Colors extends Component {
> 13 |     colors = d3.schemeCategory20;
     |            ^
  14 |     width = d3.scaleBand()
  15 |         .domain(d3.range(20));
  16 | 

我无法弄清楚为什么会出现此错误。我知道你不能直接在类内部声明类的变量/属性。但是为什么代码笔可以工作呢?

提前致谢!

更新:添加 webpack.config.js 文件:

    var path = require('path');
var webpack = require('webpack');
var HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
    entry: './app/index.js',
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: 'index_bundle.js',
        publicPath: '/'
    },
    module: {
        rules: [
            { test: /\.(js)$/, use: 'babel-loader' },
            { test: /\.css$/, use: [ 'style-loader', 'css-loader'] },
            {
                test: /\.png$/,
               loader: "url-loader?limit=100000"
             },
             {
               test: /\.jpg$/,
               loader: "file-loader"
             },
             {
              test: /\.(woff|woff2)(\?v=\d+\.\d+\.\d+)?$/,
               loader: 'url-loader? limit=10000&mimetype=application/font-woff'
              },
              {
               test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,
               loader: 'url-loader?limit=10000&mimetype=application/octet-stream'
              },
              {
               test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,
               loader: 'file-loader'
               },
               {
               test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
               loader: 'url-loader?limit=10000&mimetype=image/svg+xml'
              }
        ]
    },
    plugins: [new HtmlWebpackPlugin({
        template: 'app/index.html'
    }),
    new webpack.ProvidePlugin({
        "React": "react",
      }),],
    devServer: {
        historyApiFallback: true
    }
};

但是为什么代码笔可以工作呢?

因为它使用了转译器(在这种情况下,Babel https://babeljs.io)支持该语法 https://github.com/tc39/proposal-class-fields(目前这是第 3 阶段提案,尚未成为指定功能,但通常受到与 React 代码一起使用的转译器的支持)。

您可以看到它正在使用 Babel 进行转译,因为它在 JS 窗格标题中的“JS”旁边显示“(Babel)”:

...如果您单击旁边的齿轮图标,您将看到 Babel 被选为“预处理器”。

在这个特殊的例子中,Babel 采取了这样的做法:

class Colors extends Component {
  colors = d3.schemeCategory20;
  width = d3.scaleBand()
            .domain(d3.range(20));

   // ....
}

...并让它看起来好像是这样写的:

class Colors extends Component {
  constructor() {
    this.colors = d3.schemeCategory20;
    this.width = d3.scaleBand()
                   .domain(d3.range(20));
  }
  // ....
}

...(然后很可能将其转换为 ES5 兼容的代码,具体取决于转译设置)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React 中的类变量与 ES6 的相关文章

随机推荐

  • 我如何获取 MSMQ 队列上的所有可用消息

    处理队列中当前所有消息的最佳方法是什么 我们有一个包含大量非常小的消息的队列 我想做的是读取所有当前消息 然后将它们发送到线程池进行处理 我似乎找不到任何好的资源来向我展示如何创建一个简单的方法来返回 IEnumerable 例如 Than
  • Python set 类、float 和 int 求值

    没有看到具体的实现细节set Class但我认为这个问题的答案就在某个地方 Python 赋值基本上评估右值并使用标识符作为引用对象来指向类对象 集合也是如此 即它们是抽象数据结构或引用对象的 集合 集合不允许重复 当我创建一个集合时 如下
  • 移动 Chrome 在滚动时触发调整大小事件

    我在 Galaxy S4 Android 4 2 2 上使用 Chrome 移动浏览器 由于某种原因 每次向下滚动页面时 它都会触发一个调整大小事件 该事件通过 jquery cycle2 幻灯片中的图像缩放进行验证 知道为什么会发生这种情
  • ggplot2:从图中删除未使用的因子水平组合的方面(facet_grid)

    我想有选择地从多面 ggplot2 图中删除不必要的多面 我查看了这个问题 但不知道该怎么做 也许那里的建议现在已经过时了 将空图添加到ggplot2中的facet wrap https stackoverflow com question
  • 如何拟合余弦函数?

    I wrote a python function to get the parameters of the following cosine function param Parameters param add amp value am
  • 使用 igraph (R) 组合入射顶点的属性来创建边属性

    对于图中的每条边 我想添加一个数字属性 权重 它是事件顶点属性 概率 的乘积 我可以通过在边缘上循环来做到这一点 那是 for i in E G ind lt V G inc i p lt get vertex attribute G na
  • 未捕获(承诺中):错误:运行时编译器未加载 Angular 8

    我正在尝试从 JSON 文件加载路由 路由中还有一个延迟加载的模块 一切都按预期工作 直到代码在 aot 模式下的 ng build prod 中运行 当我尝试转到延迟加载模块链接时 出现以下错误 代码如下 应用程序路由模块 ts impo
  • 如何获取trait对象的地址?

    如何获取特征对象的地址 我试过这个 fn func fn main let boxed func Box
  • 如何使用 Imagemagick 的转换工具将 .tiff/.bmp 转换为 JPEG-XR?

    我正在使用convertimagemagick 的工具 用于将图像转换为 jpeg xr 格式 我在 debian linux 下使用最新版本 ImageMagick 6 8 6 8 问题是convert format jxr or con
  • Xcode 自动完成功能在 Swift Playgrounds 的 Sources 文件夹中不起作用

    我正在开发一个 Swift Playground 它在 Sources 文件夹中与主文件一起包含多个文件 当我在主文件中键入某些内容 例如 UI 时 我会得到预期的自动完成建议 但是 当我在 Sources 文件夹中的文件中执行相同操作时
  • 从WebView中获取当前页面的URL

    我有一个包含书籍收藏的链接 例如www bookstore com 我从中选择一本书 带有 URLwww bookstore com book1 epub 当用户单击该书的下载按钮时 应该将其下载到我的图书馆 我已经完成了下载部分 但令我困
  • 跳过错误“文档上次打开时发生严重错误”

    是否可以跳过错误 文档上次打开时发生严重错误 我使用 Excel 打开 Word 文件 我想防止出现这种情况 例如电脑在运行宏时重新启动 后来Word认为文件有问题 但我始终确信我的模板文件没问题 我使用只读方法 跳过意味着用 VBA 选择
  • 使用 log4j 记录到数据库

    由于在 log4j 中javadoc http logging apache org log4j 1 2 apidocs org apache log4j jdbc JDBCAppender html is 警告 这个版本的 JDBCApp
  • 使用 Bottle 将列表从 python 传递到 js 的最佳方法是什么?

    我使用 Bottle 作为 Web 服务器 需要将 python 列表传递给 javascript 当我只执行 myList 时 Bottle 会对列表中的字符串转义单引号并将其显示为 039 反过来 JS 对它所得到的结果也不是很满意 我
  • 嵌入式二进制验证实用程序错误

    从昨天开始 Xcode 在尝试在我的 iPhone 上运行我的 WatchKit 应用程序时做了一些愚蠢的事情 它给了我错误 嵌入式二进制验证实用程序错误 错误 警告 是一个目录 它不是很有帮助 而且似乎在抱怨我的 Watchkit 扩展目
  • 如何在maven配置中正确指定jcenter存储库?

    在 Gradle 中 我只需添加 repositories jcenter 在 maven pom xml 中执行相同操作的最简单且正确的方法是什么 或者我在哪里可以获得 jcenter 存储库的正确 url 您必须像下面这样定义setti
  • (何时)m2crypto 会移植到 Python3 吗?

    m2crypto 是否正在向 Python3 移植 我将开始一个需要跨平台 跨语言加密的新玩具项目 m2crypto 看起来像是可行的方法 但我宁愿使用 Py3 以避免必须在任何地方显式转换为 UTF8 该库的移植是否正在进行中 代码位于h
  • 升级到 OS X Mavericks 后 Python 出现奇怪问题

    将我的 OS X Lion 升级到 Mavericks 后 我遇到了一些奇怪的问题 起初 它给了我分段故障 or 总线错误 经过一番搜索后 我发现它与readline图书馆 该解决方案描述为bugs python org curl O ht
  • alpine 包 py-pip 丢失

    我尝试使用 Docker compose 文件在我的 alpine 中安装 python pip 但出现以下错误 ERROR unsatisfiable constraints py pip missing required by worl
  • React 中的类变量与 ES6

    这个问题可能已经在其他地方得到了回答 但在标记为重复之前 请帮助我解决这个问题 我指的是使用react和d3的以下codepen https codepen io swizec pen oYNvpQ https codepen io swi