我是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