Всем привет , у меня есть такой HOC :
import React, { useState } from "react";
import ErrorMessage from "@components/ErrorMessage/ErrorMessage";
export const WithErrorApi = (View) => {
return (props) => {
const [errorApi, setErrorApi] = useState(false);
const [isLoading, setisLoading] = useState(true);
return (
<>
{errorApi ? (
<ErrorMessage />
) : (
<>
<View
setErrorApi={setErrorApi}
setLoader={setisLoading}
isLoading={isLoading}
{...props}
/>
</>
)}
</>
);
};
};
И есть такой компонент который его использует :
const PeoplePage = ({ setErrorApi, setLoader, isLoading }) => {
const query = useQueryParams();
const queryPage = query.get("page");
const [people, setPeople] = useState(null);
const [prevPage, setPrevPage] = useState(null);
const [nextPage, setNextPage] = useState(null);
const [counterPage, setCounterPage] = useState(1);
const getResource = async (url) => {
const res = await getApiResource(url);
if (res) {
const peopleList = res.results.map(({ name, url }) => {
const id = getPeopleId(url);
const img = getPeopleImg(id);
return {
id,
name,
img,
};
});
setPeople(peopleList);
setNextPage(res.next);
setPrevPage(res.previous);
setCounterPage(getPeoplePageId(url));
setLoader(false);
setErrorApi(false);
} else {
setErrorApi(true);
}
};
useEffect(() => {
getResource(API_PEOPLE + queryPage);
}, []);
return (
<>
<PeopleNavigation
getResource={getResource}
prevPage={prevPage}
nextPage={nextPage}
counterPage={counterPage}
/>
{isLoading ? <Loader /> : ""}
{people !== null && <PeopleList people={people} />}
</>
);
};
PeoplePage.propTypes = {
setErrorApi: PropTypes.func,
};
export default WithErrorApi(PeoplePage)
Весь вопрос в том , какая роль
...props в моём хоке . А именно : 1) Зачем нам нужна эта функция
return (props) =>// там остальной код ....
Почему бы нам сразу не вернуть компонент с нужными нам данными 2) откуда берутся эти
props если мы их нигде не указывали и какая их роль в данном коде 3) что лежит
...props в коде компонента
<View
setErrorApi={setErrorApi}
setLoader={setisLoading}
isLoading={isLoading}
{...props} // что тут лежит и зачем это нужно если из-вне у нас нету никаких пропсов ?
/>
Код не мой,взят для ознакомления с темой хоков . Спасибо !