我有一个从IndexedDB获取一些数据的React组件,这是一个异步任务,它使用由useParams钩子传入的url中的id,假设id = 1。当我单击示例中的链接时,id变为2,但此时没有发生任何事情,该组件不会重新呈现。
我需要做些什么才能让它工作?我只是不明白为什么它现在不能工作。有没有人能开导我?
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>
</>
);
}发布于 2020-04-28 16:22:31
在使用react-async库中的useAsync钩子时,您可以使用监视或watchFn选项监视更改。因此,更改以下行:
const {data, error, isLoading} = useAsync({ promiseFn: loadData, id: parseInt(id)});至:
const {data, error, isLoading} = useAsync({ promiseFn: loadData, id: parseInt(id), watch: id});成功了。
发布于 2020-04-24 21:36:49
异步函数应该在useEffect钩子中调用。当id更改时,将始终调用useEffect。
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>
</>
);
}https://stackoverflow.com/questions/61409489
复制相似问题