首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在url中id更改时重新呈现功能组件

如何在url中id更改时重新呈现功能组件
EN

Stack Overflow用户
提问于 2020-04-24 21:26:09
回答 2查看 1.1K关注 0票数 1

我有一个从IndexedDB获取一些数据的React组件,这是一个异步任务,它使用由useParams钩子传入的url中的id,假设id = 1。当我单击示例中的链接时,id变为2,但此时没有发生任何事情,该组件不会重新呈现。

我需要做些什么才能让它工作?我只是不明白为什么它现在不能工作。有没有人能开导我?

代码语言:javascript
复制
import React, {useState} from 'react';
import { Link, useParams } from "react-router-dom";
import { useAsync } from 'react-async';

export default function (props) {
  let {id} = useParams();
  const {data, error, isLoading} = useAsync({ promiseFn: loadData, id: parseInt(id)});
  if (isLoading) return "Loading...";
  if (error) return `Something went wrong: ${error.message}`;
  if (data)
   return (
    <>
      <h1>{data.name}</h1>
      <Link to={'/2'}>other id</Link>
    </>
   );
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-28 16:22:31

在使用react-async库中的useAsync钩子时,您可以使用监视或watchFn选项监视更改。因此,更改以下行:

代码语言:javascript
复制
const {data, error, isLoading} = useAsync({ promiseFn: loadData, id: parseInt(id)});

至:

代码语言:javascript
复制
const {data, error, isLoading} = useAsync({ promiseFn: loadData, id: parseInt(id), watch: id});

成功了。

票数 1
EN

Stack Overflow用户

发布于 2020-04-24 21:36:49

异步函数应该在useEffect钩子中调用。当id更改时,将始终调用useEffect

代码语言:javascript
复制
import React, { useState } from "react";
import { Link, useParams } from "react-router-dom";
import { useAsync } from "react-async";

export default function(props) {
  let { id } = useParams();

  const [error, setError] = useState(null);
  const [isLoading, setIsLoading] = useState(false);
  const [data, setData] = useState(null);

  useEffect(() => {
    const { data, error, isLoading } = useAsync({
      promiseFn: loadData,
      id: parseInt(id)
    });
    setIsLoading(isLoading);
    setError(error);
    setData(data)
  }, [id]);

  if (isLoading) return "Loading...";
  if (error) return `Something went wrong: ${error.message}`;
  if (data)
    return (
      <>
        <h1>{data.name}</h1>
        <Link to={"/2"}>other id</Link>
      </>
    );
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61409489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档