私はreact-reduxで新しく、既存のサービスへのログインをしている単純なページを持っていました(呼び出しが機能していて、サーバーからデータを取得しています)。コンポーネント内のデータを取得してset cookieを設定し、サーバーから受信したデータに基づいてユーザーをリダイレクトします。 アクションでデータを取得していますが、コンポーネントでは定義されていません。returnxのアクションから約束を返す
onSubmit(e) {
e.preventDefault();
if (this.isValid()) {
this.setState({ errors: {}, isLoading: true });
this.props.actions.loginUser(this.state).then(
function (res) {
this.context.router.push('/');
},
function (err) {
this.setState({ errors: err.response.data.errors, isLoading: false });
}
);
}
}
アクション機能:
import * as types from './actionTypes';
import loginApi from '../api/loginApi';
export function loginSuccess(result) {
return { type: types.LOGIN_SUCCESS, result };
}
export function loginFailed(result) {
return { type: types.LOGIN_FAILURE, result };
}
export function loginUser(data) {
return dispatch => {
return loginApi.loginUser(data).then(result => {
if (result) {
if (result.ErrorCode == 0)
dispatch(loginSuccess(result));
else
dispatch(loginFailed(result));
}
}).catch(error => {
throw (error);
});
};
}
API:
static loginUser(data) {
return fetch(API + "/SystemLogin.aspx",
{
method: 'POST',
mode: 'cors',
body: JSON.stringify({
User: data.identifier,
Password: data.password
})
}).then(function (response) {
return response.json();
})
.then(function (parsedData) {
return parsedData;
//resolve(parsedData);
})
.catch(error => {
return error;
});
}
減速:
はすべてフォームコンポーネントで機能を提出いただき、ありがとうございます
import * as types from '../actions/actionTypes';
import LoginApi from '../api/loginApi';
import initialState from './initialState';
export default function loginReducer(state = initialState.login, action) {
switch (action.type) {
case types.LOGIN_SUCCESS:
return [...state, Object.assign({}, action.courses)];
//return action.result;
case types.LOGIN_FAILURE:
return action.result;
default:
return state;
}
}
これ以上のコードは必要ですか?
彼はすでに私が推測する還元サンクを使用しています。佐賀は同じ目的を果たすだろう – VivekN
こんにちはアーマド、最初にリプレイのためにありがとう、第二は佐賀を使用しています還元のための大丈夫ですか?私は反応するのが新しいので、コードを書くのにベストプラクティスをとどめようとしています。私はサガについて読んで、それを実装しようとします。 – Danny
@Danny sagasは「副作用」問題を解決するためにreduxで使用され、あなたが直面しているような問題を取り除きますが、サンクを使っても良いですが、「汚れたコード」は混じっています。しばらくの間、プロダクションでサガを使用していて、かなり驚くほど価値があります。ちょうど始まったばかりなので、試してみる価値があります。 – Bamieh