2016-08-25 88 views
0

對我的React/Redux授權設置存在嚴重的挑戰,我很茫然。當前錯誤是:Redux/React的授權組件設置

HomeHeader.js 8595:26未捕獲的ReferenceError:調度沒有定義

有很多錯在這裏,任何幫助將不勝感激。

我創建了兩個授權組件,一個用於註冊,另一個用於登錄。 AuthorizationLogin組件是我首先處理的內容。

我不知道如何讓它通過事件信息從窗體字段獲取,放入變量creds,然後通過HomeHeader組件,然後再次回到HomePage容器。我是否將所有授權組件放入一個巨大的HomeHeader組件中?

以下是主要的代碼和流程。由於某些原因,代碼沒有正確加載到StackOverflow中。

Flow

HomePage.js 
import React from 'react'; 
import {connect} from 'react-redux'; 
import * as actions from '../../../actions/homeEventFormActions'; 
import HomeHeader from '../homeHeader/HomeHeader'; 
import HomeEventForm from '../homeEventForm/HomeEventForm'; 
class HomePage extends React.Component { 
constructor(props) { 
    super(props); 
} 
render() { 
    const { dispatch } = this.props; 
    return (
    <div> 
    < HomeHeader /> 
    < HomeEventForm 
     onSubmit={this.props.onSubmit} 
    /> 
    </div> 
); 
} 
} 

function mapStateToProps(state) { 
return { 
    homeEventForm: state.homeEventForm 
}; 
} 

function mapDispatchToProps(dispatch) { 
return { 
    onSubmit: (eventName) => dispatch(actions.createEventButton(eventName)), 
}; 
} 

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





HomeHeader.js 
import React, { Component, PropTypes } from 'react'; 
import AuthorizeLogin from '../../Authorization/AuthorizeLogin'; 
import AuthorizeRegister from '../../Authorization/AuthorizeRegister'; 
import { loginUser } from '../../../actions/authorizationActions'; 
class HomeHeader extends React.Component { 
    constructor() { 
     super(); 
    } 
    _handleChange(eventKey) {
 
    ... 
    <AuthorizeLogin 
     onLoginClick={ (creds) => dispatch(loginUser(creds))} 
    /> 
    ... 
    } 
    return; 
    } 
    render() { 

     const { dispatch } = this.props; 

     return (
     ... 
      <Modal.Header closeButton onClick={()=> this._handleChange(5)}> 
     ...  
    ); 
    } 
    } 
    export default HomeHeader; 



AuthorizeLogin.js 

import React from 'react'; 


class AuthorizeLogin extends React.Component { 

constructor(props, context) { 
    super(props, context); 
    this.state = {}; 
    this._login = this._login.bind(this); 
} 
_login(e) { 
    e.preventDefault; 
    const email = this.refs.email; 
    const password = this.refs.password; 
    const creds = { email: email.value.trim(), password: password.value.trim() }; 
    this.props.onLoginClick(creds); 
} 
render() { 
return (
<Form horizontal onSubmit={this._login}> 
    <h4 className="authEmailText">Login with your email</h4> 
    <input type="email" placeholder="[email protected]" ref='email' /> 
    <input type="password" placeholder="Password" ref='password' /> 
</Form> 
); 
} 
} 
export default AuthorizeLogin; 

回答

1

所有行動都應該從容器中發出。在這種情況下,容器應該有調度。

function mapDispatchToProps(dispatch) { 
return { 
    onSubmit: (eventName) => dispatch(actions.createEventButton(eventName)), 
    onLogin: (creds) => dispatch(loginUser(creds)), 
}; 
} 

的onLogin應通過道具傳遞到下游組件:

<HomeHeader onLogin={this.props.onLogin} /> 

<AuthorizeLogin 
    onLoginClick={this.props.onLogin} 
/> 
+0

謝謝!正在向下遊傳遞的OnLogin給我帶來了問題。創建onLogin作爲回調幫助我更好地理解。 –