简体   繁体   English

反应 Firebase 数据未定义

[英]React Firebase data is undefined

I'm trying to build a fintech website, and I have a users collection and a transactions collection.我正在尝试建立一个金融科技网站,并且我有一个用户集合和一个交易集合。 One user can send money to another user by using their phone number.一个用户可以使用他们的电话号码向另一个用户汇款。

The user schema contains these用户模式包含这些

uid - string
phone - string
.....//other data

I need to achieve the following functionality我需要实现以下功能

  1. Enter phone number of target receiver输入目标接收者的电话号码
  2. Get details of user with the entered phone number通过输入的电话号码获取用户的详细信息
  3. Add this data to another collection called transactions将此数据添加到另一个名为 transactions 的集合中

I tried doing that, but I'm getting a bug that in the 3rd step, the data from the 2nd step is undefined.我尝试这样做,但我在第 3 步中遇到一个错误,第 2 步中的数据未定义。 Here's my code这是我的代码

const SendMoney = () => {

    const [receiverDetails, setRecieverDetails] = useState({})
    const [allUsers, setAllUsers] = useState([])
    const [receiverphone, setReceiverphone] = useState('')

    const usersCollectionRef = collection(db, "users")
    const getAllUsers = async () => {
        const data = await getDocs(usersCollectionRef)
        setAllUsers(data.docs.map((doc) => ({ ...doc.data(), id: doc.id })))
    }

    useEffect(() => {
        getAllUsers()
    }, [])

    const getRecieverDetails = (phone) => {
        const receiver = allUsers.filter(u => u.phone === phone)[0]
        setRecieverDetails(receiver)
    }

    const makeTransaction = async () => {
        getRecieverDetails(receiverphone)
        console.log(receiverDetails)  --------> prints {}

        
        const transactionsCollectionRef = collection(db, "transactions")
        await addDoc(transactionsCollectionRef,
            {
                toUser: receiverDetails.uid,
                //other data
            }
        )
    }

    return (
        <div>
            <h2>Send money</h2>
            <input placeholder='phone number' onChange={e => setReceiverphone(e.target.value)} />
            <input type="number" onChange={e => setAmount(e.target.value)} />
            <button onClick={makeTransaction}>send money</button>
        </div>

    )
}

export default SendMoney

My guess is that the addDoc function is called before the receiverDetails gets populated with data.我的猜测是 addDoc function 在 receiverDetails 被数据填充之前被调用。 I am not sure how to fix this bug我不确定如何修复此错误

Calls to setState or the setter of a useState hook are asynchronous.setStateuseState挂钩的设置器的调用是异步的。

Don't use state to pass data between your own pieces of code, but instead use normal variables, and promises or async / await to synchronize.不要使用 state 在您自己的代码段之间传递数据,而是使用普通变量,并使用 promises 或async / await进行同步。

const SendMoney = () => {
    const [receiverDetails, setRecieverDetails] = useState({})
    const [allUsers, setAllUsers] = useState([])
    const [receiverphone, setReceiverphone] = useState('')
    let users; // 👈 new variable

    const usersCollectionRef = collection(db, "users")
    const getAllUsers = async () => {
        const data = await getDocs(usersCollectionRef)
        users = data.docs.map((doc) => ({ ...doc.data(), id: doc.id })); // 👈 This is synchronouse
        setAllUsers(users); // 👈 This is asynchronous
    }

    useEffect(() => {
    }, [])

    const getRecieverDetails = (phone) => {
        await getAllUsers()
        const receiver = users.filter(u => u.phone === phone)[0]
        setRecieverDetails(receiver)
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在 React 中将 Firebase 数据提取到数据表中 - Fetching Firebase Data Into A Datatable In React Firebase 使用 react-firebase-hooks 时查询未定义 - Firebase query undefined when using react-firebase-hooks 获取 Firebase doc.data 未定义 - Getting Firebase doc.data is undefined Firebase Promise 返回未定义数据 Javascript - Firebase Promise Returning Undefined Data Javascript 尝试从 firebase 集合中提取数据时出错 REACT:类型错误:无法读取未定义的属性(读取“地图”) - Getting error when trying to pull data from firebase collection REACT: TypeError: Cannot read properties of undefined (reading 'map') React + Firebase - 处理非规范化数据 - React + Firebase - Handle denormalized data 从 firebase v9 检索到的数据未定义 - Retrieved data from firebase v9 is undefined 无法从 React-Native-Firebase(v6) Firestore 获取数据:undefined 不是函数(靠近“...this._firestore.native.collectionGet...”) - Can't get data from React-Native-Firebase(v6) Firestore: undefined is not a function (near '...this._firestore.native.collectionGet...') React Native Firebase undefined 不是 object(评估 'this.storage.setItem') - React Native Firebase undefined is not an object (evaluating 'this.storage.setItem') React Native Firebase RT 数据库错误 - “Undefined is not a function” - React Native Firebase RT Database Error - "Undefined is not a function"
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM