前端开发中,我们经常需要使用脚手架工具构建项目,而脚手架一般需要提供一些特定的功能才能满足我们的需求。因此,npm包@umijs/plugin-initial-state应运而生,它是一个umi插件,提供了一种在服务端和客户端统一设置初始化数据的能力,使得前端应用可以非常便利的获取到服务端渲染的数据。
使用场景
在实际开发中,我们经常有这样的场景:我们需要在服务端渲染时获取一些数据,并在客户端中使用这些数据。这种情况下,我们需要将这些数据传递到前端,并在客户端中将其初始化。@umijs/plugin-initial-state就是解决这个问题的利器。
安装
- --- ------- --------------------------- ----------
使用方法
安装好插件之后,在.umirc.js中添加如下配置:
------ ------- - -------- - ------------------------------- -------- -- -
@umijs/plugin-initial-state插件提供了一个非常好用的API,就是getInitialState()。我们可以在该API中定义我们需要在服务端渲染时获取的数据,从而可以在客户端获取并使用这些数据。
以下是一个简单的示例:
------ ------- - ---------------- ----- ----- -- - ----- - --- - - ---- ----- ---- - ----- ------------- ------ - ---- -- -- --
在以上示例中,我们通过getUser()函数从请求的req对象中获取user信息,在getInitialState() API中返回一个名为user的对象,该对象会在客户端中挂载到window.__INITIAL_STATE__上,供我们后续使用。
深入理解
在上面的示例中,我们只是简单的返回了一个对象,你可能会很好奇这个对象是怎么转化成window.__INITIAL_STATE__的,以及这个window.__INITIAL_STATE__是什么时候被创建的?
实际上,当我们使用了@umijs/plugin-initial-state插件之后,会在服务端渲染时向响应的HTML文档中注入一段