React 服务端渲染框架 next.js

作者: Lupino | 来源:发表于2017-04-04 10:34 被阅读1154次

    next.js 服务端渲染框架真的是一个救命的稻草。在此之前我一直在寻找 React 服务端渲染的框架,一直没有一个满意的答案,直到碰到 next.js

    那么 next.js 与标准的 React.Component 有何区别吗?

    通过阅读代码我发现 next.js 多了一个初始化 props 的函数。

    // file: lib/utils.js
    export async function loadGetInitialProps (Component, ctx) {
      if (!Component.getInitialProps) return {}
    
      const props = await Component.getInitialProps(ctx)
      if (!props && (!ctx.res || !ctx.res.finished)) {
        const compName = Component.displayName || Component.name
        const message = `"${compName}.getInitialProps()" should resolve to an object. But found "${props}" instead.`
        throw new Error(message)
      }
      return props
    }
    

    next.js 使用 Component.getInitialProps 来初始化组件。
    Component.getInitialProps 被标记为异步的函数 (await), 因此返回一个 Promise 或者 async 标记的函数。这也为加载异步数据提供了保障。

    Component.getInitialProps 的参数 ctx,浏览器端和服务器端不相同,依然通过代码来发现。

    // file: server/render.js#L52
    const ctx = { err, req, res, pathname, query }
    
    // file: client/index.js#L102
    props = await loadGetInitialProps(Component, { err, pathname, query })
    

    从两段代码可以得知服务端多了 { req, res }req 是服务端 Request 对象, res 是服务端 Response。有了这两东西就可以做很多事情了。

    当然 next.js 作为一个框架,做的事情不止这一些,还有一些和神奇的东西,需要使用时进一步了解。

    相关文章

      网友评论

        本文标题:React 服务端渲染框架 next.js

        本文链接:https://www.haomeiwen.com/subject/zijaottx.html