我有一个功能组件。基本上,页面由一个表单组成-我需要将一些现有数据填充到表单中,并让用户更新它。
我用我写的钩子来处理表单。它是这样的
const [about, aboutInput] = useInput({
type: 'textarea',
name: 'About you',
placeholder: 'A few words about you',
initialValue: data && data.currentUser.about,
})
字符串about
是值,aboutInput
是实际的输入元素本身。我也可以传递一个initialValue给它。
在组件的开头,我像这样获取数据:const { data, loading, error } = useQuery(GET_CURRENT_USER_QUERY)
个
这只在客户端执行,在服务器端data
是未定义的。
因此,只有当我通过Link组件从另一个客户端页面导航到页面时,这段代码才有效。
它不适用于:
1.当我直接进入网址
1.当我从另一个SSR页面(使用getInitailProps)导航到此页面时
我不想使用生命周期方法/类组件(因为我使用钩子,并希望继续使用功能组件。
在Next JS中有没有一种很好的方法来实现这一点,并继续使用功能组件?
3条答案
按热度按时间cgh8pdjw1#
您可以使用useEffect Hook获取客户端的数据。
首先从
react
导入字符串
组件中的用法如下所示
型
第一个参数是一个函数,你可以在里面调用API。
如果你想从查询字符串中得到GET_CURRENT_USER_QUERY,你可以从getInitailProps传递参数,并将其作为props读取到useEffect数组依赖中。
jobtbby32#
我看到你提到了
getInitailProps
。所以你可能知道它的作用和它的警告。如果你想在服务器端定义数据,为什么不在表单所在的页面上使用getInitailProps
。这样你就可以从props
中检索数据并将其传递给表单组件。它应该直接访问url或从其他页面访问。3htmauhk3#
这个问题的内容有点混乱,我不知道为什么会涉及到一个表格,所以我会尝试根据标题来回答。
在客户端获取数据的最佳实践在新版React文档中有描述。特别是,“你可能不需要效果”页面是一个宝贵的信息来源。
它提倡两件事:
1.使用库进行客户端数据获取,通常不值得推出自己的解决方案
1.如果你不想要一个库,请正确地实现清理,如
useData
钩子所示:字符串
使用方法:
型
作为奖励,如果你想在服务器渲染和第一次客户端渲染期间显示数据,你可以使用Next.js内置功能混合服务器端数据获取,并使用服务器数据警告客户端缓存。
例如,在SWR中,这是通过the fallback option完成的。我在我的Next.js course中称这种模式为“客户端-服务器中继”,因为服务器值像中继一样传递给客户端。然后客户端代码处理交互:在突变时重新获取,轮询等。