首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从服务层路由React组件

从服务层路由React组件
EN

Stack Overflow用户
提问于 2020-06-21 13:32:41
回答 1查看 184关注 0票数 1
代码语言:javascript
复制
ReactDOM.render(
    <Provider store={store}>
        <ConnectedRouter history={history}>
            <App />
        </ConnectedRouter>
    </Provider>,
    document.getElementById('root'));

我使用服务层与web通信,并集中API调用和HTTP错误处理。

代码语言:javascript
复制
export class HttpClient {

constructor(dispatch: any) {
        this.axios = require('axios');
        this._dispatch = dispatch;
    }

    public Post<T>(apiEndpoint: any, payload: T) {
        return this.axios.post(apiEndpoint, payload)
            .catch((error: any) => {
                this.HandleServerError(error);
            });
    }
}

HTTP错误处理。

代码语言:javascript
复制
HandleServerError(error: any) {
        if (error.response.status == 500) {
            window.location.href = '/Internal-Server-Error';
        } else if (error.response.status == 401) {
            window.location.href = '/Unauthorized';
        }
        else if (error.response.status == 400) {
            window.location.href = '/BadRequest';
        }
        else
            this._dispatch({ type: 'RECEIVE_HTTP_ERROR', response: error.response.data });
    }

我不想从HTTP服务层使用window.location.href。如何使用React路由器来维护历史记录?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-21 13:41:01

您可以在一个单独的文件中创建history对象,并从该文件导出该对象。

代码语言:javascript
复制
import { createBrowserHistory } from 'history';
export default createBrowserHistory();

App组件中,导入历史对象并将其设置为history支柱在Router组件上的值。

代码语言:javascript
复制
return (
    <Router history={history}>
       ...        
    </Router>
);

现在,您可以在任何文件中导入历史对象并使用它。

P.S. Router组件不是以Router形式导入的BrowserRouter组件。它的低级Router组件,它接受一个名为history的道具。

有关详细信息,请参阅反应路由器文档

演示:

在本演示中,将向jsonplaceholder发出请求,以获取单个待办事项。如果请求成功,则显示待办事项。如果出现错误,则使用react路由器历史对象显示错误组件。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62499272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档