@Itername

Из-за чего не могут добавиться пользователи одновременно в список?

Есть некая очередь в которую могут добавляться пользователи, в Firebase Cloud Firestore она выглядит так:
Collection(users) => document(users) => field(queue[arr])
657d4614ee6ac467240087.png
Для отличия пользователей используется id который сохраняется в localStorage, но когда пользователи пытаются войти одновременно то входит только кто-то один.
Вот код:
const [users, setUsers] = useState([]);
    const [name, setName] = useState("");

    useEffect(() => {
        const fetchQueue = async () => {
            const db = getFirestore();
            const usersRef = doc(db, "autocommitQueue", "users");

            const unsubscribe = onSnapshot(usersRef, (doc) => {
                if (doc.exists()) {
                    setUsers(doc.data().queue || []);
                }
            });

            return () => unsubscribe();
        };

        fetchQueue();
    }, []);

    const setFirebase = async (arr) => {
        const refDb = doc(getFirestore(), "autocommitQueue", "users");

        await setDoc(refDb, {
            queue: arr,
        });
    };

    const addUser = () => {
        const id = uuid4();
        if (name.length > 0) {
            if (localStorage.getItem("id") === null) {
                if (!users) {
                    localStorage.setItem("id", id);
                    setFirebase([{ name: name, id: id }])                                  
                } else {
                    localStorage.setItem("id", id);

                    setFirebase([...users, { name: name, id: id }])                     
                }
            }
        }
    };

    return(
                <Box
                    sx={{
                        display:
                            localStorage.getItem("id") !== null
                                ? "none"
                                : "flex",
                        alignItems: "center",
                    }}
                >
                    <TextField
                        type={"text"}
                        id="outlined-number"
                        label={"Name"}
                        onChange={(event) => {
                            setName(event.target.value);
                        }}
                    />
                    <Button
                        onClick={addUser}
                        variant={"outlined"}
                        sx={{ "&.MuiButton-root": { height: "56px" } }}
                    >
                        Push
                    </Button>
                </Box>
    )
  • Вопрос задан
  • 41 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы