2016-12-29 108 views
1

我正在使用React和Redux,Router開發應用程序。 但現在我無法將狀態設置(更新)爲'mapStateToProps'函數的狀態。 所以減速器的args'action'是'undefined'。 我認爲這個問題的原因是mapStateToProps的參數不能從任何地方傳遞。使用React和Redux時,狀態是未定義的對象,路由器

有誰知道如何傳遞一個狀態(從客戶端輸入數據)到mapStateToProps函數?

我的mapStateToProps函數就是這樣寫的。

const mapStateToProps = state=>{ 
console.log(state); // this 'state' return undefined. 
return { 
loginform: state 
}}; 

export default connect(mapStateToProps)(LoginForm) 

這是我的代碼。

指數

/index.js

let store = createStore(showUsername, 
window.devToolsExtension && window.devToolsExtension()); 

ReactDOM.render(
<Provider store={store}> 
<Router history={browserHistory}> 
    <Route component={AppNavBar}> 
     <IndexRedirect to='/login'> 
     <Route path='/login' component={LoginForm} /> 
    </Route> 
</Router> 
</Provider> 
, 
document.getElementById('root') 
); 

組件

/Loginform.js

class LoginForm extends Component { 
    ... 
} 

const mapStateToProps = state=>{ 
console.log(state); // this 'state' return undefined. 
return { 
    loginform: state 
}}; 


export default connect(mapStateToProps)(LoginForm) 

ActionCreator

/actioncreator.js

export const showusername = 'showUsername'; 

    export const showUsername =(username,index)=>{ 
    console.log(username,index); 
    return{ 
     type:showusername, 
     username, 
     payload:index 
    } 

    }; 

#Reducer

/reducer.js

const initialState = { 
      username: '', 
      password: '', 
      submit: false, 
      //request: 'self', 
      showselectfield: false 
     }; 

    export default function showUsername(state = initialState, action) { 
    switch (action.type) { 
     case type.showusername: 
     return (
      Object.assign({},initialState ,{username:action.username,password:action.password}) 
     ); 

    default: 
     return state 
    } 
} 

感謝,

回答

0

在當您檢查觸發的動作你減速,你檢查type.showusername但既然你已經有action.type在開關的情況下,你應該檢查簡單的字符串值,即"showusername"

const initialState = { 
      username: '', 
      password: '', 
      submit: false, 
      //request: 'self', 
      showselectfield: false 
     }; 

    export default function showUsername(state = initialState, action) { 
    switch (action.type) { 
     case "showusername": 
     return (
      Object.assign({},state ,{username:action.username,password:action.password}) 
     ); 

    default: 
     return state 
    } 
} 
+0

謝謝!我改變了案例的價值,並且運作良好。但仍然'action.username'未定義。 – yasu

+0

您是否能夠在actionCreator console.log()語句中看到用戶名 –

+0

當我看到console.log(用戶名)時,它顯示未定義。 – yasu

相關問題