reactjs - 在 redux 中使用调度时遇到问题

标签 reactjs firebase redux-toolkit

我尝试获取 firestore 数据库并在 redux 中分派(dispatch)该数据库。并在我的列表页中打印该数据库。 我成功获取firestore数据库,console.log打印所有数据。但我尝试使用map()函数。只打印一项数据。我不知道为什么会发生这种事。 我认为我的代码是错误的。但我不知道我哪里错了。

DictCard.js

import { collection, getDocs} from "firebase/firestore";
import React, { useEffect } from "react";
import { db } from "../firebase"; 
import { useSelector, useDispatch  } from "react-redux";
import { getDict } from "../redux/ListReducer";

const Card = ({dict}) => {
    return(
        <div className="inbox">
            <p className="text1">단어</p>
            <p className="text2">{dict.word}</p>
            <p className="text1">설명</p>
            <p className="text2">{dict.explain}</p>
            <p className="text1">예시</p>
            <p className="text2" style={{color:"lightskyblue",paddingBottom:"0"}}>{dict.example}</p>
        </div>
    )
}

const DictCard = () => {
    const dictList = useSelector((state) => state.dictList.dicts);
    const dispatch = useDispatch();

    useEffect( async () => {
        const query = await getDocs(collection(db, "dict"));
        query.forEach(doc => {
            console.log([doc.id, doc.data()])
            dispatch(getDict([{id: doc.id, text: doc.data()}]))
        });
    },[]);


    return(
        <div className="dict-card" >
            {dictList.map((dict) => (
                <Card dict = {dict.text} key = {dict.id}/>
            ))}
        </div>
    )
}

export default DictCard;

ListReducer.js

import { createSlice } from "@reduxjs/toolkit";

// const initialState = [{id:"",text:{word:"",explain:"",example:""}}]

const initState = {
    dicts: [{
        id:"",
        text:{
            word:"",
            explain:"",
            example:""
        }
    },]
}

export const ListReducer = createSlice({
    name: "dictList",
    initialState: initState,
    reducers: {
        addDict: (state, action) => {
            state.dicts = action.payload
        },
        getDict: (state, action) => {
            state.dicts = action.payload
        },
        updateDict: (state, action) => {
        },
        deleteDict:  (state, action) => {
        },
    },
});

export const { addDict, getDict, updateDict, deleteDict } = ListReducer.actions;

export default ListReducer.reducer;

我认为调度的位置是错误的,但我不知道

最佳答案

我解决了问题。

 useEffect( async () => {
        const arr = []
        const query = await getDocs(collection(db, "dict"));
        query.forEach(doc => {
            console.log([doc.id, doc.data()])
            // dispatch(getDict([{id: doc.id, text: doc.data()}]))
            arr.push({id: doc.id, text: doc.data()})
        });
        dispatch(getDict(arr))
    },[]);

需要创建空数组

关于reactjs - 在 redux 中使用调度时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71137219/

相关文章:

javascript - 如何在浏览器中打开 Redux Toolkit 的生产模式?

reactjs - 为什么初始状态为null时createSlice会报错?

reactjs - 以编程方式聚焦并选择 react 选择中的值

javascript - subview 覆盖父 View 的边界。 [ react native ]

ios - Firebase Google 签名显示带有网站名称 url 的空白 safari 页面

javascript - Firestore规则: fetch message thread by threadId in secure way

reactjs - 如何从另一个 API 缩减器 RTK 查询自动重新获取 API?

javascript - 根据当前路线突出显示选项卡

javascript - 获取下拉标题以更改为选定的下拉值

firebase - 如何在循环中使用Future/Async函数? ( Dart/flutter )