javascript - React组件的componentDidMount中的耗时函数调用
问题描述
在我的 React 组件的 componentDidMount 函数中,我将一个字符串(通过 props 接收)传递给一个函数,该函数对该字符串执行一些处理并返回另一个字符串作为结果。然后我使用生成的字符串更新状态。
import React, { Component } from "react";
import {fun} from "../some/module";
class Comp extends Component {
state = {
data: "default value"
};
componentDidMount() {
var { str } = this.props;
var data = fun(str);
this.setState({ data });
}
render() {
return (
<p>{this.state.data}</p>
);
}
}
export default Comp;
该功能fun(text)
最多运行 3 - 4 秒。它不会从任何远程服务器获取任何数据,它只会根据给定的字符串生成一个新字符串。我在另一个组件上有这个组件的 React Router Link。我可以通过单击该链接来查看此组件。问题是当我单击该链接时,它会等到 componentDidMount 函数完成执行,然后呈现该组件。由于 componentDidMount 函数中的那个耗时的函数调用,这个延迟会持续 3 - 4 秒。
我想在使用默认状态单击该链接后立即呈现此组件。在fun(text)
函数完成执行后,我想再次渲染或使用返回的字符串更新这个组件fun(text)
。
如何在此组件中实现此行为?我应该在何时何地调用该函数fun(text)
?
解决方案
您可以使用static getDerivedStateFromProps()
而不是componentDidMount
.
static getDerivedStateFromProps(nextProps,prevState) {
if(nextProps.str) {
const resultData = fun(str);
return {
data: resultData
}
}
return null
}
我希望它会有所帮助。有关getDerivedStateFromProps()
此处的更多信息是链接
推荐阅读
- java - 当我显示列表中的元素时,它们就在那里,但是当我想在方法中使用列表时,什么都没有显示
- python - 如何在 heroku 上运行无限程序(不重启或休眠)
- java - 为什么我不能禁用 Spring Boot 自动生成的密码和用户?
- mysql - Azure 数据工厂 - 从 MySql 或 Blob 存储提取数据时出错
- rxjs - 使用 SubjectBehaviour 理解组件通信
- date - 如果当前日期不在特定日期之间,则中止操作的批处理文件
- node.js - 如何在 GitHub Pages 中托管角度配置?
- python - 没有返回 HttpResponse 对象。它返回 None 而不是
- javascript - 如何在 prod 环境中查看 vue.js 中确切的未屏蔽请求?
- javascript - 我如何使 onClick 和 href 一起工作?