【问题标题】:React-Redux @connect syntax errorReact-Redux @connect 语法错误
【发布时间】:2017-08-15 15:20:03
【问题描述】:

我是使用 React 和 Redux 的新手,我正在构建一个简单的 todos 应用程序。我正在使用命令行中的 create-react-app 工具编写我的应用程序。

问题

我去了其他博客和帖子,其他人提到我缺少一个 npm 插件来转换装饰器“transform-decorators-legacy”,我将它与 Babel 一起添加到我的依赖项中,但我仍然收到同样的错误.

Syntax error: Unexpected token (9:0)

   7 | import './App.css';
   8 |
>  9 | @connect((store) => {
     | ^
  10 |   return {
  11 |     user: store.user.user
  12 |   }

我的代码

import React, { Component } from 'react';
import { connect } from 'react-redux';

import Todos from './components/Todos';
import Todo from './components/Todo';

import './App.css';

@connect((store) => {
  return {
    user: store.user.user
  }
})
class App extends Component {
  constructor(){
    super()
    this.state = {
      name: 'Brad',
      todos: [
        {
          id: '001',
          name: 'Take out trash',
          completed: false
        },
        {
          id: '002',
          name: 'Meeting with boss',
          completed: false
        },
        {
          id: '003',
          name: 'Go out to dinner',
          completed: false
        }
      ]
    }
  }
  render() {
    return (
      <div className="App">
        <h1>Hello</h1>
        <Todos name={this.state.name} todos={this.state.todos}/>
        <Todo/>
      </div>
    );
  }
}

export default App;

我的依赖项

package.json

{
  "name": "react-redux-project",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "axios": "^0.16.2",
    "react": "^15.6.1",
    "react-dom": "^15.6.1",
    "react-redux": "^5.0.6",
    "redux": "^3.7.2",
    "redux-logger": "^3.0.6",
    "redux-promise-middleware": "^4.3.0",
    "redux-thunk": "^2.2.0"
  },
  "devDependencies": {
    "babel": "^6.23.0",
    "babel-plugin-transform-decorators-legacy": "^1.3.4",
    "react-scripts": "1.0.11"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test --env=jsdom",
    "eject": "react-scripts eject"
  }
}

任何帮助/知识将不胜感激!

【问题讨论】:

    标签: reactjs redux react-redux


    【解决方案1】:

    首先我要注意我同意@markerikson 的回答,使用函数而不是装饰器。

    如果您确实想要使用装饰器,则需要执行更多步骤。您已将插件添加到依赖项中,但没有告诉 Babel 使用它。

    Create React App 在后台使用带有 Babel 的 Webpack,即在 react-scripts 中。你需要调整那个 Babel 配置。 “创建 React App”的方法是从 Create React App 到 eject 然后编辑 .babelrc - 请参阅 https://babeljs.io/docs/plugins/transform-decorators/#usage-via-babelrc-recommended-

    【讨论】:

      【解决方案2】:

      请注意,React 和 Redux 团队通常都不鼓励使用装饰器。相反,在这种情况下,您应该使用 connect() 作为函数:

      export default connect(mapStateToProps, mapDispatchToProps)(MyComponent);
      

      【讨论】:

        【解决方案3】:

        试试这样:

        const stateMap = (state) => {
            console.log('state', state);
            return {
                //something from state
            };
        };
        
        export default connect(stateMap)(App);
        

        【讨论】:

        • 当我使用这个答案时,我得到这个错误“export 'default' (imported as 'connect') was not found in 'react-redux'
        • 您的导入是否带有花括号?从'react-redux'导入{连接};
        • 很高兴为您提供帮助:)
        猜你喜欢
        • 2020-04-25
        • 1970-01-01
        • 2018-06-28
        • 2020-08-04
        • 2018-06-06
        • 2019-02-15
        • 1970-01-01
        • 2020-07-05
        • 1970-01-01
        相关资源
        最近更新 更多