Из родительского компонента приходит массив с отправленными сообщениями. Проблема в том, что в useEffect вызывается setState и рендер циклится.
export const UserMessages = (props) => {
const connection = props.connection;
const newSendedMessage = props.arSendedMessage;
const [added, setAdded] = useState(false);
const [sendedMsg, setSendedMsg] = useState([]);
const [receivedMsg, setReceivedMsg] = useState([]);
const [arUsersMessages, setArUsersMessages] = useState([]);
useEffect(() => {
setSendedMsg(newSendedMessage);
sortMessages();
});
connection.onmessage = function (event) {
handlerReceivedMessage(event);
}
function sortMessages() {
let arMess = sendedMsg.concat(receivedMsg);
arMess.sort((a, b) => (a.date > b.date) ? 1 : -1)
console.log(arMess);
if (arMess == arUsersMessages)
return;
else {
setArUsersMessages(arMess);
}
}
Пробовал вот так, не помогло:
useEffect(() => {
if (loaded)
return;
setSendedMsg(newSendedMessage);
sortMessages();
setLoaded(true);
}, [loaded]);
Компонент не рендерится, когда данные изменяются
Еще пробовал вот так:
useEffect(() => {
if (loaded)
return;
setSendedMsg(newSendedMessage);
sortMessages();
setLoaded(true);
});
Тоже самое