Reputation: 15
According to the thread below,
useCustomHook being called on every render - is something wrong with this
It says it is completely normal to keep calling the custom hook function every time React re-renders.
My questions are, if it affects on a performance side when returning an array from this Custom Hook function( Not when fetching API and receiving data ) which contains a lot of values.
If so, how to prevent it ( How to let this Custom Hook function run only once )?
Here is my Custom Hook code, it returns an array which contains around 5000 string values.
function FetchWords(url: string) {
const [data, setData] = useState<string[]>([]);
useEffect(() => {
fetch(url)
.then((words) => words.text())
.then((textedWords) => {
setData(textedWords.replace(/\r\n/g, "\n").split("\n"));
});
}, []);
const expensiveData = useMemo(() => data, [data]);
return expensiveData;
}
export default FetchWords;
My Main js
const wordLists: any[] = useFetch(
"https://raw.githubusercontent.com/charlesreid1/five-letter-words/master/sgb-words.txt"
);
Upvotes: 0
Views: 1550
Reputation: 521
use...
useMemo
in your hook, simply return data
state.fetch
call only once, so no problem there as the effect has empty dependency, so it runs once after first render.data
state and returns the same reference each time your custom hook is called during component re-renders. There is no copy operation, so you don't need to worry about that.fetch
100 entries for example, then your backend needs to provide that api.Hope this resolves your queries as it is not very clear what is your doubt.
Upvotes: 1
Reputation: 11
Upvotes: 1