当前位置: 首页 > 知识库问答 >
问题:

使用React和react-router进行ajax调用的最佳实践

任昊苍
2023-03-14

我的React组件需要一个ajax调用来获取要呈现的数据。

最初,我使用该方法在Render中启动了一个ajax调用。这是我的伪代码...

export class MyView extends React.Component<any, any> {

    hasAjaxData: boolean = false;

    renderAndGetData() {
        const data = {

        };

        AjaxCall(data)
            .then((results) => {
                this.hasAjaxData = true;
                // save to store here, causing a rerender
                ...
                });
            })
            .catch((err: Error) => {
                console.error(err);
            });
        return (
            <SpinnerComponent />
        );
    }

    renderWithData() {
        return (
            <div>
                Render with data here
            </div>
        );
    }

    render() {
        return this.hasAjaxData ? this.renderWithData() : this.renderAndGetData();
    }
}

在阅读了关于呈现调用的React文档后,我有点担心在呈现调用中更改存储区,即使是异步的。

我提出了另一种使用componentDidMount和ComponentDidUpDate的方法。这最终变得稍微复杂一些,因为在最初呈现组件时,componentDidMount和componentDidUpdate都会被调用。任何后续更新(通过更改的URL,然后通过react-router重新执行)都不调用componentDidMount,而只调用componentDidUpdate(在初始装入期间也调用它)。为了避免任何不必要的呈现,需要仔细注意标志。

共有1个答案

乐宜民
2023-03-14

render函数应该是纯的。这意味着在render中进行AJAX调用是严格禁止的。原因是,如果您的呈现函数可以更改状态,它也可能导致重新呈现器,这可能导致您陷入呈现循环,这将是地狱调试。

但是,即使您谨慎地编写render函数,以确保永远不会陷入呈现循环,仍然有更多的理由保持renderpure:React希望render是纯的,因此它在处理呈现时不会期望状态发生变化。虽然您需要检查React的内部以确定,但我非常肯定在呈现时更改状态会对呈现性能产生严重影响,因为如果呈现时状态发生更改,则需要React中止呈现并重新启动。

 类似资料:
  • 问题内容: 使用 withRouter() 时如何获取路由上下文,位置,参数等? 您可以使用withRouter获得该信息,还是必须将这些内容显式传递到组件树中? 问题答案: 因此,不再使用。在道具中都可以使用: 因此,假设您想将用户转到新路线,您只需

  • 问题内容: 我正在尝试为我的react应用设置服务器端渲染,并且试图使用出色的react-router模块来处理非js情况(某些爬虫,当用户关闭js时,原因)。但是,我遇到了麻烦。我一直在这里使用出色的响应作为各种指南,但我却遇到了奇怪的错误。尝试使用时,我会坚持不懈。我是否设置了服务器端渲染错误,缺少明显的东西或其他东西? 我的设置: 真正的基本Express服务器 顶级反应组件 输出: 问题答

  • 问题内容: 我正在阅读这篇文章:http : //eviltrout.com/2013/06/15/ember-vs- angular.html 它说, 由于缺乏约定,我想知道有多少Angular项目依赖于不良行为,例如直接在控制器内进行AJAX调用?由于依赖注入,开发人员是否将路由器参数注入指令中?AngularJS新手开发人员是否会以经验丰富的AngularJS开发人员认为惯用的方式来构造代码

  • 我计划使用我的状态作为一种信号形式,我将来回改变以显示我的加载屏幕、主窗体和成功或错误消息。但不确定这是否是最佳实践。下面是一个示例代码 但我不确定这是否是最好的方法,我担心这会减慢我的应用程序或消耗客户机的CPU。你能推荐更好的方法吗?

  • 问题内容: 我是React Router的新手,并了解到重定向页面的方法有很多: 使用 使用 在React Router v4中,有和。 我对所有这些选项感到困惑,是否有最佳的方法来重定向页面? 问题答案: 实际上,这取决于您的用例。 1)您想保护您的路线免受未经授权的用户的侵害 如果是这种情况,则可以使用称为的组件,并可以实现以下逻辑: 请记住,如果您想按预期的方式工作,则应将其放在组件的ren

  • 本文向大家介绍浅谈react-router HashRouter和BrowserRouter的使用,包括了浅谈react-router HashRouter和BrowserRouter的使用的使用技巧和注意事项,需要的朋友参考一下 官网推荐的是BrowserRouter,但是此方式需要服务器配合,而且有点不好的是重定向只能到首页,无法停留在当前页,具体用法很简单,举例说明。 HashRouter