我想问一下,如果我的组件成功或失败的http请求,我该如何处理。我从我的动作(http)通过reducer调度数据。我想在这里实现的是在http请求之后,如果组件会成功或失败,它会通知我,如果http请求完成,我可以做一些其他的事情。检查http是成功还是失败Reactjs
组件:
class BoardAdd extends React.Component {
addBoard(formProps) {
// This is where my HTTP request
this.props.addBoard(formProps);
// After I call the this.props.addBoard(formProps). I want to check if it succeeds or fail
}
render() {
const { error, handleSubmit } = this.props;
return (
<Col lg={3}>
<a href="javascript:;" className={style.boardItemAdd} onClick={this.openAddBoardModal.bind(this)}>
<div className={[style.boardItemContainer,style.boardItemGray].join(' ')}>
Create New Board
</div>
</a>
<Modal show={this.state.boardAddModalShow} onHide={this.closeAddBoardModal.bind(this)} bsSize="small" aria-labelledby="contained-modal-title-sm">
<Modal.Header closeButton>
<Modal.Title id="contained-modal-title-sm">Create Board</Modal.Title>
</Modal.Header>
<Modal.Body>
<form onSubmit={handleSubmit(this.addBoard.bind(this))}>
<Field name="name" component={renderField} type="text" placeholder="What are you organizing" />
<button className="btn btn-primary btn-block">Submit</button>
</form>
</Modal.Body>
</Modal>
</Col>
)
}
}
function mapStateToProps(state){
return {
data: state.board.data,
success: state.board.success
};
}
export default connect(mapStateToProps, { addBoard })(form(BoardAdd));
操作:
export function addBoard(data){
return function(dispatch){
axios.post(`${API_URL}/boards`,
{
name: data.name
}
)
.then(response => {
if(response.status === 201){
dispatch({ type: ADD_BOARD_SUCCESS, data: response.data.result });
}
})
.catch(function (error) {
console.log(error);
});
}
}
减速机:
import { ADD_BOARD_SUCCESS,ADD_BOARD_FAIL} from 'constant/board.jsx';
const INITIAL_STATE = {
data: {},
error_message: '',
success: false
};
export default (state = INITIAL_STATE, action = {}) => {
switch(action.type) {
case ADD_BOARD_SUCCESS:
return {
data: action.data,
success: true,
error_message: ''
};
case ADD_BOARD_FAIL:
return {
data: {},
success: false,
error_message: action.error_message
};
default: return state;
}
}
默认缩减器状态是什么样的?仔细检查mapStateToProps中的点符号。如果拼写错误,道具将不确定。应该是'state.board.data'还是别的什么? –
嗨KeithA,我已经编辑我的帖子,添加我的减速器的代码。 –
请求的实际响应是什么?你确定'response.data.result'不是未定义的吗? –