Как я могу предотвратить несколько выборок данных, когда этот хук используется в нескольких компонентах? Нет необходимости в его повторном получении, когда URL-адрес остается прежним, только при изменении searchQuery
. Я также хочу иметь возможность вызывать loadPeople()
с параметрами во всех компонентах.
Я пытался проверить, было ли заполнено people.data
перед выполнением fetchData()
, но loadPeople()
никогда больше не будет работать.
type UseStarWarsProps = {
people: AsyncData<ApiStarWarsPerson[]>;
loadPeople: (query?: string) => void;
};
export const useStarWars = (): UseStarWarsProps => {
const [searchQuery, setSearchQuery] = useState('');
const people: AsyncData<ApiStarWarsPerson[]> = useSelector((state: RootState) => state.starWars.people);
const apiProxy: ApiProxyType = ApiProxy();
let dispatch = useDispatch();
const fetchData = async () => {
dispatch(setLoaderStarWarsAction());
try {
const data = await apiProxy.getStarWarsPeople(searchQuery);
dispatch(setStarWarsAction(data.results));
} catch (e) {
dispatch(setErrorStarWarsAction(e));
}
};
useEffect(() => {
fetchData();
}, [searchQuery]);
const loadPeople = (query?: string) => {
setSearchQuery(query || '');
};
return { people, loadPeople };
};