私はReduxので、私のログインシステムを足すと私は私が私の最初のReduxのためのよりシンプルなもので開始している必要があります感じて:DRedux - 私は自分の状態を変えました。
しかし:
リデューサー
function application (state = initialState, action) {
switch (action.type) {
case 'LOGIN_REQUEST':
return Object.assign({}, state, { loggedIn: true, shouldRedirect: true });
case 'LOGGED_IN':
return Object.assign({}, state, { loggedIn: true, shouldRedirect: true });
case 'LOGIN_FAILED':
return Object.assign({}, state, { loggedIn: false, shouldRedirect: false, errorMessage: action.error.message })
}
return state
}
アクション
function receiveLogin(user) {
return {
type: LOGIN_SUCCESS,
isFetching: false,
isAuthenticated: true
}
}
function loginError(message) {
return {
type: LOGIN_FAILURE,
isFetching: false,
isAuthenticated: false,
message
}
}
export function submitLogin (creds) {
if(creds.email.length && creds.pw.length){
return receiveLogin();
}else{
return loginError();
}
}
は
class SignIn extends React.Component {
logIn = (e) => {
console.info('as');
e.preventDefault();
store.dispatch(authAction.submitLogin(this.state));
};
render = function() {
return (
<app-content class={loggedOut.home}>
<Logo />
<h1>Welcome to <br/> Kindred</h1>
<h2>Please sign in to your account</h2>
<form role="form" onSubmit={this.logIn}>
<input type="text" name="email" onChange={this.changed} component="input" placeholder="Enter email address"/>
<input type="password" name="pw" onChange={this.changed} component="input" placeholder="Password"/>
<button>Sign In</button>
</form>
<div className={loggedOut.extraDetails}>
<Link to="/signup">Don't have an account yet?</Link>
<Link to="/skip" className={loggedOut.extraDetailsRight}>Skip</Link>
</div>
</app-content>
)
}
};
のでLOGGED_IN
状態変化に反応します。どのように私は私の状態をリンクして、私を別のページに転送するのですか?私はこのような論理を私の還元剤の中に加えることはできません。これらは純粋でなければなりません。しかし、私は別のページにユーザーに転送する必要があります。私は既にログインルートを持っているか持っていない人に気を付けるためにそれにHOCを持っている反応ルートを持っています。しかし、これはレンダリング時のみ:/私はこのロジックに追加することはできません。
私はあなたが状態を管理し、店を聞いている "コンテナ"コンポーネントを持っていると思いますか? –