2016-04-30 87 views
0

我正在嘗試在我的還原器中使用spread屬性,但它返回的語法錯誤無效。我的版本支持使用擴展運算符,因爲我只在減速器中出現錯誤。Redux中的傳播屬性

auth_types.js

export const AUTH_USER = 'AUTH_USER' 
export const UNAUTH_USER = 'UNAUTH_USER' 

auth_actions.js

import { AUTH_USER, UNAUTH_USER } from './auth_types' 



    export function signinUser({ email, password }) { 
     return function(dispatch) { 
     axios.post(`${ROOT_URL}/signin`, { email, password }) 
      .then(response => { 
      dispatch({ type: AUTH_USER }) 

      browserHistory.push('/feature') 
      }) 
     } 
    } 

reducer.js

import { AUTH_USER, UNAUTH_USER } from '../actions/auth_types' 

export default function(state = {}, action) { 
    switch(action.type) { 
    case AUTH_USER: 
     return { ...state, authenticated: true } 
    case UNAUTH_USER: 
     return { ...state, authenticated: false } 
    } 

    return state 
} 

回答

5

the documentation

由於對象擴展語法仍然是ECMAScript的第2階段提案,因此您需要使用像Babel這樣的轉譯器才能在生產中使用它。您可以使用現有的es2015預設,安裝babel-plugin-transform-object-rest-spread並將其單獨添加到.babelrc中的插件陣列中。

{ 
    "presets": ["es2015"], 
    "plugins": ["transform-object-rest-spread"] 
} 

注意,這仍然是一個實驗性的語言特性的提案,因此它可能在未來改變。

+0

這工作。任何理由爲什麼在我的項目中的其他地方的語法工作呢? –

+0

不知道:)不知道,對不起。除非你像在數組或字符串或映射那樣使用迭代器。 – Andy

+0

啊,它在一個數組上。謝謝 –

0

如果您使用的是webpack,您可以通過啓用stage-2預置來解決此問題。

首先安裝NPM包:

npm install --save babel-preset-stage-2 

然後在webpack.config.js添加階段2到預置陣列:

module: { 
    loaders: [ 
    { 
     test: /\.jsx?$/, 
     exclude: /node_modules/, 
     loader: 'babel-loader', 
     query: { 
     presets:[ 'es2015', 'react', 'stage-2' ] 
     } 
    } 
    ] 
}