【发布时间】:2021-12-29 03:55:18
【问题描述】:
我有一个这样的查询参数:
const router = useRouter()
const { name } = router.query
我想使用这个name 并将其传递给具有状态的值:
const [queryName, setQueryName] = useState('')
问题是我不能将它作为默认值传递,如下所示:useState(name) 因为name 更新。
因此,我必须设置它,而不是使用 name 作为默认值。
setQueryName(name)
这也是无效的,我不能像这样在组件中设置它。
所以我必须使用useEffect
useEffect(() => {
setQueryName(name)
}, [name])
但是这会触发无限错误:
已超过最大更新深度。当组件在 useEffect 中调用 setState 时,可能会发生这种情况,但 useEffect 要么没有依赖数组,要么每次渲染时其中一个依赖项都发生了变化。
从另一个钩子设置状态的正确方法是什么?
【问题讨论】:
-
为什么不直接从
router.query使用name? -
我同意拉梅什的观点。将派生状态存储在本地组件状态中通常被认为是反模式。当您可以/应该只在组件中引用
router.query.name时,将name保存到状态有什么意义/目的? -
假设我正在获取一个 URI 参数,然后使用该值来填充表单字段,并且该表单字段是可食用的,您会想要完全按照我正在做的事情做。我想做的不是那么激进。
标签: reactjs react-hooks next.js