小编bre*_*net的帖子

如何仅在 NextJS 站点构建期间使用 getInitialProps?

使用 NextJS 构建静态站点时,我希望该getInitialProps方法仅在构建步骤期间触发,而不是在客户端触发。

在构建步骤中,NextJS在使用每个组件呈现的 HTML 生成页面的静态 HTML 之前运行getInitialProps 方法。在客户端,NextJS 也会在页面组件呈现之前运行此方法,以便为组件返回必要的 props。因此,大型请求可能会延迟客户端的第一次绘制,因为这是一个阻塞请求。

// example usage of API call in getInitialProps
import fetch from 'isomorphic-unfetch'

function Page({ stars }) {
  return <div>Next stars: {stars}</div>
}

Page.getInitialProps = async ({ req }) => {
  const res = await fetch('https://api.github.com/repos/zeit/next.js')
  const json = await res.json()
  return { stars: json.stargazers_count }
}

export default Page
Run Code Online (Sandbox Code Playgroud)

我不愿意将我的慢速 API 请求移动到componentDidMount以避免阻塞请求,因为我想使用构建步骤期间返回的数据来填充静态 HTML,并且此特定请求不需要动态或更新构建。

有没有办法在构建时getInitialProps运行而不是在客户端加载页面时运行?next export

这是好的做法吗?

javascript static-site node.js next.js

10
推荐指数
1
解决办法
7011
查看次数

使用 &lt;object&gt; 中的 SVG 是否可以允许单击事件传播到父处理程序?

从 HTML 添加 SVG<object>似乎会创建一个无响应的空间,其中单击事件不会通过 SVG 和对象元素传播。

在示例中,通过单击按钮的中心来演示这一点。单击操作似乎不会将事件传播到父元素(按钮)。但是,当单击按钮的边缘(远离 SVG)时,将调用单击事件。

var buttonEl = document.getElementById('button');
buttonEl.addEventListener('click', function() {
  console.log('Clicked!')
})
Run Code Online (Sandbox Code Playgroud)
<button id="button" style="padding:5rem;">
  <object data="https://dev.w3.org/SVG/tools/svgweb/samples/svg-files/check.svg" type="image/svg+xml" style="height:40px;width:40px;">
    Check
  </object>
</button>
Run Code Online (Sandbox Code Playgroud)

html javascript svg

2
推荐指数
1
解决办法
1185
查看次数

标签 统计

javascript ×2

html ×1

next.js ×1

node.js ×1

static-site ×1

svg ×1