【发布时间】:2021-07-23 16:35:59
【问题描述】:
我的 Next.js 应用中有一个页面,它执行以下操作:
- 这是一个搜索页面
- 路径名是这样的:
/search?q=search+slug - 在客户端加载数据
- 需要读取
router.query才能得到router.query.q的值
PS:我正在使用 Redux
const dispatch = useDispatch();
const router = useRouter();
const query = router.query as { q: string };
const queryString = query.q;
console.log("SEARCH CONTAINER");
console.log(`queryString: ${queryString}`);
useEffect(() => {
dispatch(THUNK.LOAD(queryString));
return () => { dispatch(ACTION.RESET_STATE()); };
},[dispatch,queryString]);
请参阅useEffect。理论上每个queryString(实际上是req.query.q)应该只运行一次。
但我被重复了THUNK.LOAD 操作。这就是为什么我在那里添加了console.log()。
这就是它正在注销的内容:
然后:
这就是我收到重复调度的原因。当然,我可以在发送之前检查if (queryString),或者我可以从window.location.search 获得它。但我很惊讶router.query.q 首先是undefined。这怎么可能呢?为什么req.query 对象会被异步填充?对此有何解释?
【问题讨论】:
标签: reactjs next.js query-string