React-Redux @connect Синтаксическая ошибка
Я новичок в использовании React и Redux, я создаю простое приложение todos. Я пишу свое приложение, используя инструмент create-реагировать на приложение в командной строке.
Проблема
Я пошел в другие блоги и пост, и другие упоминали, что мне не хватает плагина 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"
}
}
Любая помощь / знания будут оценены спасибо!
3 ответа
Попробуйте вот так:
const stateMap = (state) => {
console.log('state', state);
return {
//something from state
};
};
export default connect(stateMap)(App);
Во-первых, я хотел бы отметить, что я согласен с ответом @ markerikson, используйте функцию вместо декоратора.
Однако если вы хотите использовать декораторы, потребуется еще пара шагов. Вы добавили плагин к своим зависимостям, но не сказали Babel использовать его.
Приложение Create React использует Webpack с Babel под капотом, а именно в реагирующих скриптах. Вы должны настроить эту конфигурацию Babel. Способ "Создать приложение React" для этого - извлечь приложение из приложения React и затем отредактировать.babelrc - см. https://babeljs.io/docs/plugins/transform-decorators/
Обратите внимание, что команды React и Redux обычно не рекомендуют использовать декораторы. Вместо этого в этом случае вы должны использовать connect()
как функция:
export default connect(mapStateToProps, mapDispatchToProps)(MyComponent);