codeigniter NextJS路由器.查询未给出ID参数[重复]

imzjd6km  于 2022-12-07  发布在  其他
关注(0)|答案(2)|浏览(138)

此问题在此处已有答案

useRouter/withRouter receive undefined on query in first render(8个答案)
26天前关闭。
我使用nextjs作为前端,CodeIgniter作为后端来创建crud。我正在学习一个教程,其中前端是reactjs。在reactJs中,当crud的更新部分到来时,我们可以使用react-router-dom useParam函数来获取ID,但在nextJS中,我们使用router.query,它不起作用,因此我现在陷入了如何获取特定列的ID以更新它的困境

const { id } = router.query;

  const getProductById = async () => {
// if (id !== undefined && id != null && id > 0) {
  const response = await axios.get(`http://localhost:8080/companies/${id}`);
  setName(response.data.name);
  setCreatedBy(response.data.createdBy);
  console.log(id);
// }};

这是我正在使用的代码,它给出了一个错误

`http://localhost:8080/companies/undefined`
nnsrf1az

nnsrf1az1#

您可以query.id在服务器端获取www.example.com,然后将其传递给客户端

export async function getServerSideProps(context) {
  const { id } = context.query;
  console.log(`query id: ${id}`);
  return { props: { id } };
}

现在,id作为prop传递给客户端:

const YourComponent=(props)=>{
   console.log("passed id prop",props.id)
}
sqxo8psd

sqxo8psd2#

路由器查询在静态优化页面的第一次呈现时可以为空。请尝试将代码 Package 在useEffect

useEffect(()=>{
 const { id } = router.query;

  const updateProduct = async (e) => {
    e.preventDefault();
    await axios.patch(`http://localhost:8080/companies/${id}`, {
      company_name: name,
      created_by: createdBy,
    });
    router.push("/products");
  };
},[router.query])

相关问题