在Next.js13中,服务器组件是默认启用的.我想知道是否需要将每个FETCH包装在一个单独的函数中,并将‘USE SERVER’添加到其中以隐藏该函数的代码,或者我是否可以在返回TSX的同一个函数中使用FETCH?

使用函数和‘USE SERVER’的代码包装:

async function getData() {
  'use server'
  const res = await fetch('http://localhost:3001/test',{cache:'no-cache'})

  return res.json()
}

interface Test{
  age:number,
  name:string,
  likes:number,
}
 
export default async  function Home() {

  const tests:Test[] = await getData()

  return (
   <div className='flex flex-row'>
    {tests.map((test)=>{
      return (
        <div>
          <div>
          {test.name}
          </div>
          <div>
          {test.age}
          </div>
          <div>
          Likes: {test.likes}
          </div>
        </div>
      )
    })}
   </div>
  )
}

不带‘Use Sever’的代码:

interface Test {
  age:number,
  name:string,
  likes:number,
}
 
export default async  function Home() {

  const res = await fetch('http://localhost:3001/test',{cache:'no-cache'})

  const tests:Test[] = await res.json()

  return (
   <div className='flex flex-row'>
    {tests.map((test)=>{
      return (
        <div>
          <div>
          {test.name}
          </div>
          <div>
          {test.age}
          </div>
          <div>
          Likes: {test.likes}
          </div>
        </div>
      )
    })}
   </div>
  )
}

这些版本中哪一个更安全?每个版本都应该在什么时候使用?

推荐答案

正如您所说,在app路由中,Next.js默认使用服务器组件(直到在顶部添加了"use client").它们在服务器上被调用,并作为HTML返回给浏览器(包含JSX中的内容,即return部分).没有来自组件的JavaScript代码到达浏览器:103.

"use server"是为app路由的一个特定功能而引入的,称为Server Actions,其中传递给表单元素的函数(具有"use server")中,您将获得API路由.

这看起来可能不太可能,但"use server"并不是"use client"的对立面.顶部没有"use client"的零部件是"use client"的反义词.而"use server"是完全不同的.

Typescript相关问答推荐

如何将http上下文附加到angular中翻译模块发送的请求

如何将绑定到实例的类方法复制到类型脚本中的普通对象?

net::BER_RECTION_REUSED和Uncatch使用Axios和TanStack-Query useMutation时未捕获错误(DelivercMutation)

在这种情况下,如何获得类型安全函数的返回值?

类型{...}的TypeScript参数不能赋给类型为never的参数''

我用相同的Redux—Toolkit查询同时呈现两个不同的组件,但使用不同的参数

动态调用类型化函数

通过字符串索引访问对象';S的值时出现文字脚本错误

为什么在回调函数的参数中不使用类型保护?

使用订阅时更新AG网格中的行

迭代通过具有泛型值的映射类型记录

从对象类型描述生成类型

声明文件中的类型继承

如何缩小函数的返回类型?

Typescript -返回接口中函数的类型

在打字应用程序中使用Zod和Reaction-Hook-Forms时显示中断打字时出错

如何在TypeScrip中使用数组作为字符串的封闭列表?

Typescript不允许在数组中使用联合类型

如何让Record中的每个值都有独立的类型?

包含多个不同类构造函数的接口的正确类型?