Я делаю вызов api на свой сервер при монтировании компонента, поэтому сначала я сделал это с пустым массивом в useEffect:
useEffect(() => {
fetch('http://localhost:8080/api/chat/auth/getChats?pageSize=3',{
headers: {
'Authorization': localStorage.getItem('Authorization')
}
}).then(data => data.json())
.then(data => setUserChats(data))
}
}, [])
Но есть предупреждение о зависимостях, и в нем говорится об использовании обратного вызова в родительском, но я не понимаю, в чем разница между запоминанием метода с пустым массивом в родительском и просто пустым массивом в действительности:
Родитель. js:
const setChatsCallback = useCallback(chats => {
setChats(chats)
}, [])
Child. js:
useEffect(() => {
fetch('http://localhost:8080/api/chat/auth/getChats?pageSize=3',{
headers: {
'Authorization': localStorage.getItem('Authorization')
}
}).then(data => data.json())
.then(data => setUserChats(data))
}, [setChatsContainer])
Также я видел места, где они сначала определяют метод в useEffect, а затем вызывают его, есть ли разница между ними, и просто помещают logi c в useEffect напрямую:
useEffect(() => {
async function doRequest() {
fetch('http://localhost:8080/api/chat/auth/getChats?pageSize=3',{
headers: {
'Authorization': localStorage.getItem('Authorization')
}
}).then(data => data.json())
.then(data => setUserChats(data))
}
doRequest()
}, [setChatsContainer])
И если есть разница, могу ли я просто сделать это с помощью функции самовыполнения:
useEffect(() => {
(async() => {
fetch('http://localhost:8080/api/chat/auth/getChats?pageSize=3',{
headers: {
'Authorization': localStorage.getItem('Authorization')
}
}).then(data => data.json())
.then(data => setUserChats(data))
smoothscroll.polyfill()
setChatsContainer(chatsContainer)
})()
}, [setChatsContainer])