Я не понимаю, какие маги c действуют здесь, я пытаюсь все вспомнить, я не могу решить эту проблему.
Я хочу использовать массив, который находится в реагировать на состояние моего компонента в слушателе веб-сокета, когда слушатель срабатывает, мое состояние - пустой массив, однако я устанавливаю значение в useEffect.
Вот мой код:
function MyComponent() {
const [myData, setMyData] = useState([]);
const [sortedData, setSortedData] = useState([]);
useEffect(() => {
someAxiosCallWrapped((response) => {
const infos = response.data;
setMyData(infos.data);
const socket = getSocket(info.socketNamespace); // wrap in socket namespace
handleEvents(socket);
});
}, []);
useEffect(() => {
setSortedData(sortTheArray(myData));
}, [myData]);
const handleEvents = (socket) => {
socket.on('EVENT_NAME', handleThisEvent);
};
const handleThisEvent = payload => {
const myDataCloned = [...myData]; //<=== my probleme is here, whatever I've tried myData is always an empty array, I don't understand why
/**
* onHandleEvent is an external function, just push one new object in the array no problem in the function
*/
onHandleEvent(myDataCloned, payload);
setMyData(myDataCloned);
};
return (
<div>
// display sortedData no problem here
</div>
);
}
Вероятно, пропустил что-то очевидное, если кто-то увидит что.
Спасибо!