npm 包 @shopify/react-universal-provider 使用教程

阅读时长 5 分钟读完

简介

@shopify/react-universal-provider 是一个 npm 包,它提供了一种让某些 React 组件在服务端渲染和客户端渲染时共享数据的方式。它的用法非常简单,但是需要理解一些 React 生态系统中服务端渲染和客户端渲染的相关概念和技术。本文将详细讲解这个 npm 包的使用方法,同时介绍一些基础概念和相关技术。

安装

npm 包 @shopify/react-universal-provider 可以通过 npm 或 yarn 安装,建议使用 yarn:

用法

@shopify/react-universal-provider 提供了一个 UniversalProvider 组件,你可以将你需要在服务端和客户端上共享的数据作为其 data 属性传入,然后将你需要在服务端渲染的 React 组件作为其子组件传入。例如:

-- -------------------- ---- -------
------ ----- ---- --------
------ ------------------- ---- ------------------------------------

-------- ---------------------- -
  ------ -----------------
-

------ ------- -------- -------------- -
  ------ -
    ------------------ -----------------
      ------------ --
    --------------------
  --
-

在客户端代码中,你可以按如下方式解决初始数据获取的问题:

-- -------------------- ---- -------
------ ----- ---- --------
------ ------------------- ---- ------------------------------------
------ ----------- ---- ----------------

-------- ----- -
  ------ -
    -------------------
      ------------ -- ------------ ----------------- ---
    --------------------
  --
-

这里,UniversalConsumer 组件接受一个函数作为其子组件,这个函数可以获取由 UniversalProvider 组件提供的数据。MyComponent 组件从 UniversalConsumer 组件中接收传递进来的 message 属性。

服务端渲染

在服务端渲染版本的代码中,你可以首先通过一些数据获取逻辑来获取初始的 data 属性,然后将其传递给 UniversalProvider 组件。例如:

-- -------------------- ---- -------
------ ----- ---- --------
------ -------------- ---- -------------------
------ ------------------- ---- ------------------------------------
------ --- ---- --------

----- -------- ----------------- -
  ----- ---- - ----------
  ----- --- - -
    ------------------ ------------
      ---- --
    --------------------
  --
  ----- ---- - -----------------------------------
  ------ ---------- -----
    ------
      ------
        --------------------
      -------
      ------
        ---- ----------------------
        --------------------------- - ---------------------------------
        ------- --------------------------
      -------
    ---------
-

------ ------- -------

这里,我们在渲染结果输出到页面之前,将初始数据保存在了传递给客户端代码的 HTML 页面中,并将其命名为 window.INITIAL_DATA。在客户端代码中,我们可以从这个全局变量中读取来自服务端的数据。例如:

-- -------------------- ---- -------
------ ----- ---- --------
------ -------- ---- ------------
------ ------------------- ---- ------------------------------------
------ --- ---- --------

----- ---- - --------------------
----- --- - -
  ------------------ ------------
    ---- --
  --------------------
--
--------------------- --------------------------------

这里,我们使用 ReactDOM.hydrate 而不是 ReactDOM.render 来向浏览器中已经渲染的 HTML 代码中添加事件监听器等客户端交互逻辑。

总结

以上,我们详细讲解了 npm 包 @shopify/react-universal-provider 的使用方法,并介绍了一些 React 生态系统中服务端渲染和客户端渲染的相关概念和技术。希望本文对你理解 React 服务端渲染有所帮助。

示例代码

完整的示例代码可以在以下代码仓库中找到:

https://github.com/example/react-universal-provider-example

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5f3d0faddbf7be33b25670fa

纠错
反馈