我是react-redux中的新人,當時我有一個簡單的頁面來登錄現有服務(調用正在工作,我從服務器獲取數據),我想要獲取組件中的數據並設置設置cookie,並根據從服務器接收的數據重定向用戶。 我在操作中獲取數據,但在組件中未定義。 謝謝大家返回從諾言中的行動
在表單組件的提交功能:
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;
}
}
是否還需要其他代碼?
他已經在使用redux thunk我猜。佐賀會服務於相同的目的 – VivekN
嗨艾哈邁德,首先感謝您的重播,第二是使用傳奇是可以爲REDX?因爲我是新的反應,我試圖留在編寫代碼的最佳做法。我會閱讀關於這個傳奇故事並嘗試實施它。 – Danny
@Danny sagas在redux中使用來解決「副作用」問題,並擺脫像你所面對的問題,使用thunk是好的,但它仍然保持「髒代碼」混合在一起,我們已經一直在生產中使用傳奇一段時間,它的相當了不起,它值得嘗試,因爲你剛剛開始 – Bamieh