应该在服务器端还是客户端获取数据,以填充Next.js表单中的选择元素?

huangapple go评论70阅读模式
英文:

Should I fetch data on the server side or client side to populate a select element in Next.js form?

问题

我目前正在使用Next 13开发一个Web系统,需要填充一个选择元素,我正在过度思考一个“问题”。

我需要使用来自数据库的一些数据来填充我的选择元素,但是这个选择元素位于我的客户端表单内(不能是服务器组件)。

我的问题是,我应该在服务器端获取数据并将其传递给我的组件作为属性,还是在客户端端获取数据。

这个表单在两个路由上都有使用,分别是“/new”和“/edit”。
在服务器端获取数据的问题是,我需要在两个不同的页面上获取相同的数据,我不知道这样做是否正确。

英文:

I'm currently developing a web system using Next 13 where i need to populate a select element and i'm overthinking about a "problem".

I have to populate my select with some data that comes from my database, but this select is inside my form that are client side (and can't be server component).

And my question is, should i fetch the data on the server side and pass to my component as a prop or just fetch it on client side.

This form is used on two routes, the "/new" and "/edit".
The problem to fetch on server side is that i will need to fetch the same data on two differente pages, i don't know if doing that is correctly

答案1

得分: 3

关于在使用 Next.js 开发的 Web 系统中填充选择元素,有几种获取数据的选项。让我们讨论每种方法的利弊:

1- 在服务器端获取数据并将其作为属性传递:

优点:

  • 数据在服务器端获取和处理,减少了客户端的工作量。
  • 数据可以在多个页面或组件之间共享,确保一致性。
  • 从 SEO 的角度来看,填充的选择元素包含在初始 HTML 响应中,有益于 SEO。

缺点:

  • 如果数据对于 "/new" 和 "/edit" 路由都相同,在服务器端获取它可能会导致冗余请求。
  • 如果数据是动态的并且经常更改,服务器端获取可能不是最佳选项。

2- 在客户端获取数据:

优点:

  • 如果数据对于 "/new" 和 "/edit" 路由都相同,可以避免冗余请求。
  • 允许更动态的更新并避免缓存陈旧的数据。

缺点:

  • 数据的获取和处理将在客户端执行,可能需要额外的时间和资源。
  • 如果填充的选择元素依赖于客户端渲染,可能会影响 SEO。

考虑到您的特定情况,即需要为 "/new" 和 "/edit" 路由获取相同的数据,您可以选择客户端获取以避免冗余请求。您可以获取数据一次,并将其存储在共享状态管理解决方案(如Redux、React Context或Next.js内置的状态管理)中。

或者,如果数据不经常更改,并且您更喜欢利用服务器端渲染的好处,仍然可以在服务器端获取数据,但请确保实施适当的缓存机制以减少冗余请求。

英文:

When it comes to populating a select element in a web system developed with Next.js, you have a couple of options for fetching the data. Let's discuss the pros and cons of each approach:

1- Fetching data on the server side and passing it as a prop:

Pros:

  • The data is fetched and processed on the server side, reducing the amount of
    work on the client side.
  • The data can be shared across multiple pages or components, ensuring consistency.
  • SEO benefits as the populated select element is included in the initial HTML response.

Cons:

  • If the data is the same for both the "/new" and "/edit" routes, fetching it on the server side can result in redundant requests.
  • If the data is dynamic and changes frequently, server-side fetching might not be the best option.

2- Fetching data on the client side:

Pros:

  • Avoids redundant requests if the data is the same for both the "/new" and "/edit" routes.
  • Allows for more dynamic updates and avoids caching stale data.

Cons:

  • The data fetching and processing will be done on the client side, which may require additional time and resources.
  • SEO might be affected if the populated select element relies on client-side rendering.

Considering your specific case, where the same data needs to be fetched for both the "/new" and "/edit" routes, you could opt for client-side fetching to avoid redundant requests. You can fetch the data once and store it in a shared state management solution like Redux, React Context, or Next.js's built-in state management.

Alternatively, if the data doesn't change frequently and you prefer to leverage server-side rendering benefits, you can still fetch the data on the server side, but make sure to implement proper caching mechanisms to minimize redundant requests.

huangapple
  • 本文由 发表于 2023年6月2日 02:39:59
  • 转载请务必保留本文链接:https://go.coder-hub.com/76384802.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定