Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

super() is only allowed in a derived constructor #12

Open
1 of 4 tasks
JasinYip opened this issue Sep 27, 2018 · 1 comment
Open
1 of 4 tasks

super() is only allowed in a derived constructor #12

JasinYip opened this issue Sep 27, 2018 · 1 comment
Assignees

Comments

@JasinYip
Copy link

General Information

  • Bug
  • Improvement
  • Feature
  • Other

Description
I'm trying to use @component decorator and it shows this error.

Version: webpack 4.20.2
Time: 57ms
Built at: 09/27/2018 2:44:37 PM
     Asset       Size  Chunks             Chunk Names
 bundle.js    1.1 MiB    main  [emitted]  main
index.html  440 bytes          [emitted]
Entrypoint main = bundle.js
[./src/Components/TodoList.js] 2.14 KiB {main} [built] [failed] [1 error]
    + 45 hidden modules

ERROR in ./src/Components/TodoList.js
Module build failed (from ./node_modules/babel-loader/lib/index.js):
SyntaxError: /Users/jasinyip/prj/hi/react-todolist/my-app/src/Components/TodoList.js: super() is only allowed in a derived constructor
   4 | @component
   5 | class Counter {
   6 |   constructor () {
>  7 |     super()
     |     ^
   8 |     this.state = {
   9 |       val: 2
  10 |     }
    at File.buildCodeFrameError (/Users/jasinyip/prj/hi/react-todolist/my-app/node_modules/@babel/core/lib/transformation/file/file.js:261:12)
    at NodePath.buildCodeFrameError (/Users/jasinyip/prj/hi/react-todolist/my-app/node_modules/@babel/traverse/lib/path/index.js:157:21)
    at Object.Super (/Users/jasinyip/prj/hi/react-todolist/my-app/node_modules/@babel/plugin-transform-classes/lib/transformClass.js:81:18)
    at NodePath._call (/Users/jasinyip/prj/hi/react-todolist/my-app/node_modules/@babel/traverse/lib/path/context.js:53:20)
    at NodePath.call (/Users/jasinyip/prj/hi/react-todolist/my-app/node_modules/@babel/traverse/lib/path/context.js:40:17)
    at NodePath.visit (/Users/jasinyip/prj/hi/react-todolist/my-app/node_modules/@babel/traverse/lib/path/context.js:88:12)
    at TraversalContext.visitQueue (/Users/jasinyip/prj/hi/react-todolist/my-app/node_modules/@babel/traverse/lib/context.js:118:16)
    at TraversalContext.visitSingle (/Users/jasinyip/prj/hi/react-todolist/my-app/node_modules/@babel/traverse/lib/context.js:90:19)
    at TraversalContext.visit (/Users/jasinyip/prj/hi/react-todolist/my-app/node_modules/@babel/traverse/lib/context.js:146:19)
    at Function.traverse.node (/Users/jasinyip/prj/hi/react-todolist/my-app/node_modules/@babel/traverse/lib/index.js:94:17)
 @ ./src/App.js 21:0-45 47:33-41
 @ ./src/index.js
 @ multi (webpack)-dev-server/client?http://localhost:8080 ./src/index.js
Child html-webpack-plugin for "index.html":
     1 asset
    Entrypoint undefined = index.html
       4 modules
ℹ 「wdm」: Failed to compile.

Steps to reproduce

import { autobind, component } from 'react-decoration'

@component
class Counter {
  constructor () {
    super()
    this.state = {
      val: 2
    }
  }

  render () {
    return (
      <div onClick={this.increment}>
        {this.state.val}
      </div>
    )
  }

  @autobind
  increment () {
    this.setState({ val: this.state.val + 1 })
  }
}

export default Counter

Versions

{
  "dependencies": {
    "react": "^16.5.2",
    "react-decoration": "^2.0.0",
    "react-dom": "^16.5.2",
    "react-scripts": "1.1.5"
  },
  "devDependencies": {
    "@babel/core": "^7.1.0",
    "@babel/plugin-proposal-decorators": "^7.1.0",
    "@babel/preset-env": "^7.1.0",
    "@babel/preset-react": "^7.0.0",
    "babel-loader": "^8.0.2",
    "css-loader": "^1.0.0",
    "html-webpack-plugin": "^3.2.0",
    "style-loader": "^0.23.0",
    "webpack": "^4.20.2",
    "webpack-cli": "^3.1.1",
    "webpack-dev-server": "^3.1.9"
  }
}
  • react-decoration: 2.0.0
@mbasso mbasso self-assigned this Sep 27, 2018
@mbasso
Copy link
Owner

mbasso commented Sep 27, 2018

Hi @JasinYip,
I've reproduced this issue and it seems that there are some problems with the constructor. I have to do more tests and find a solution.
I think that at the moment, in your case, you can do something like this:

import { autobind, component } from 'react-decoration'

@component
class Counter {
  constructor () {
    this.state = {
      val: 2
    }
  }

  // or without constructor:
  // state = {
  //     val: 2
  // }

  render () {
    return (
      <div onClick={this.increment}>
        {this.state.val}
      </div>
    )
  }

  @autobind
  increment () {
    this.setState({ val: this.state.val + 1 })
  }
}

export default Counter

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants