Т.е., если в массиве 4 элемента, то элемент на 4 позиции перемещать на 1 позицию, а элементы на 1, 2 и 3 позиции перемещать на 2, 3 и 4 позиции соответственно.
1. ...не сразу.
удалит ли сборщик мусора переменную user ? после того как функция отдаст разметку
2....
как в этом случае поступит сборщик? и как лучше организовывать работу в плане оптимизации памяти
const [data, setData] = useState([]);
const takeData = async () => {
const UID = getAuth().currentUser.uid;
const db = getFirestore();
const q = query(collection(db, "users", UID, "statistic"));
const querySnapshot = await getDocs(q);
setData(querySnapshot.map((doc) => doc.data()));
};
useEffect(() => {
takeData();
}, []);
const onOpen = useCallback(() => {
let value = false;
setIsOpen(open => {
value = open; // как я понял, отправлять надо старое значение
return !open;
});
Promise.resolve().then(() => logger.send(value));
}, []);
Этот материал читал.
Но как показалось, React.memo можно было избежать.
{positions.map(({ id, name, ref, dishes }) => <Position ... />)}
export const Position = memo(({ ..., dishes, ... }) => {
.........
{dishes.map((item) => <Dish ... />}
.....
});
useEffect(() => {
socket.current = new WebSocket(`ws://localhost:8000/message`)
socket.current.onopen = () => {
console.log('connected')
};
socket.current.onmessage = (event) => {
const message = JSON.parse(event.data);
setMessages((messages) => [...messages, message]);
};
socket.current.onclose = () => {
console.log('socket was closed')
};
socket.current.onerror = () => {
console.log('socket get some error')
};
return () => {
socket.current.close();
};
}, [])
function Component1({children}) {
return (
<StyledComponent1>
<p>Wrapper</p>
{children}
</StyledComponent1>
);
}
item.price = item.price * item.count
reply.replies = [newReply,...reply.replies]
setReplies(rootReplies=>[...rootReplies])