javascript - 如何使用 ReactJS 实现真正的部分更新?
问题描述
我有一个工作面试,招聘人员问我“处理部分更新和管理应用程序大小”
例如,他解释并展示了一个大小为 8MB 的 SPA,他说这并不理想和完美!?!?
他说我们应该用不同的方法管理应用程序的大小!?
为了进行测试,在面试结束后,我使用 google chrome DevTools 检查了linkedin 网站。在任何请求之后,我看到响应是谁是 html 网页(Html,Css,JS)并且显然在每个请求后将 html 响应附加到页面,这是控制 SPA 大小的想法!
所以我有一个问题,默认情况下,在 create-react-app 包中,我们有 webpack 来创建 web 模块,并将所有组件加载到一个 bundle.js 中,这个 js 文件对于 40 个或更多组件来说会很重。也许10MB或更多...
如何用完美准确的局部更新方法实现真实优化的 SPA 结构?
不幸的是我只懂一点英文,如果我写英文有误,请原谅我:-) ;-)
谢谢
解决方案
我认为您正在寻找的是动态导入或在需要时异步加载组件(或更多代码)。有多种方法可以做到这一点
- 当用户向下滚动到组件时加载
- 仅在用户单击按钮时加载组件(例如模态)
- 在初始关键数据已经渲染后加载组件(例如,仅在其父组件已加载并渲染到 dom 后才下载组件的代码)。
最后一个例子可以这样完成:
class Dynamic extends Component {
constructor(props) {
super(props);
this.state = { module: null };
}
componentDidMount() {
const { path } = this.props;
import(`${path}`)
.then(module => this.setState({ module: module.default }))
}
render() {
const { module: Component } = this.state; // Assigning to new variable names @see: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
return(
<div>
{Component && <Component />}
</div>
)
}
}
上面的代码所做的是在它的父组件已经加载之后加载组件代码,方法是将它导入到组件中。
目前这种分码方式
由 create-react-app 支持。
在这里阅读更多
还要检查这个react-loadable
推荐阅读
- javascript - 如何从模块返回管道数据?
- python - 试图平衡括号但不明白我的代码有什么问题
- python - 您的 shell 未正确配置为在 dockerfile 上使用“conda activate”
- affinetransform - 仿射变换矩阵。不懂数学?
- flutter - LIstView 中的 Flutter Dismissible 事件
- unity3d - 为什么统一在动画结束时增加一帧
- apache-spark - AWS Glue - 从目录而不是数据源标头中派生架构
- android - 更改字符串的值不更新android数据绑定中的视图
- python - 如何使用 Python 将包含 \n 的行的 Excel 工作表拆分为单独的行?
- firebase - TypeError:未定义不是对象(评估“this.state.user”)