我想問一下,如果我的組件成功或失敗的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'不是未定義的嗎? –