让我分享我的代码
route_reducer.js
const INITIAL_STATE = {
....
errorMessage: "",
loading: false
};
export default (state = INITIAL_STATE, action) => {
switch (action.type) {
....
case UPDATE_ERROR:
return {
...state,
errorMessage: action.payload.error,
loading: action.payload.loading
};
default:
return state;
}
};
route_actions.js
//update loading spinner and error message
export const updateErrorAndLoading = (error = "",loading = false) => async dispatch => {
dispatch({ type: UPDATE_ERROR, payload: { error, loading } });
};
Home.js
你应该处理一些条件渲染(在你的应用程序中)。如果this.props.loading 为真,则显示微调器,不显示其他组件...等等。
import { Spin } from "antd";
class Home extends Component {
render() {
//you can pass error message or check some conditions like
//this.props.errorMessage.trim() === "" ?null: <div>your custom componet..etc, {this.props.errorMessage}</div>
const spinner = this.props.loading ? (
<Spin size="large" className="spinner" />
) : null;
return (
<>
{/* spinner */}
{spinner}
</>
const mapStateToProps = state => {
return {
...,
errorMessage: state.route.errorMessage,
loading: state.route.loading
};
};
export default connect(
mapStateToProps,
actions
)(Home);
App.css
根据您的需要制作.spinner 位置fixed 或absolute 并提供您自己的CSS 属性
/* spinner */
.spinner {
position: fixed !important;
top: 10em;
margin-left: 10px !important;
margin-top: 10px !important;
height: 50px;
left: 1em;
z-index: 200;
}
在您的任何组件中,您都可以传递错误消息或加载状态
showSpinner=()=>{
this.props.updateErrorAndLoading("some error occured", true);
}
closeSpinner=()=>{
this.props.updateErrorAndLoading(undefined, undefined);
}
整页
让我知道你是否能够实现这一点。