【问题标题】:React firestore increment gives type errorReact Firestore 增量给出类型错误
【发布时间】:2019-10-24 01:38:15
【问题描述】:

我想在单击按钮时增加我的 Firestore 数据库中的数字字段的值。我已经设置了 onClick 按钮,但是当我单击它时会出现此错误:

TypeError: 无法读取未定义的属性“增量”

我找不到我做错了什么。

这是我的代码:

import React,{useState,useEffect, useRef, useContext} from 'react'
import UserContext from  './UserContext.js';
import fire from '../config/Fire';
import copper from '../img/coppernew.jpg'
function useTimes(){
  const user = useContext(UserContext)
  const [kullanici,setTimes] = useState([])
  useEffect(()=>{
    fire
      .firestore()
      .collection('kullanici')
      .doc(user)
      .onSnapshot((doc)=>{
          const newTimes = doc.data()
          setTimes(newTimes)
      })
  },[])

  return kullanici
}

function upgradecopper(){
  var userUid = fire.auth().currentUser.uid;
  console.log(userUid);
  var db = fire.firestore();
  var copperincrease =  db.collection("kullanici").doc(userUid);
  copperincrease.update({
    copper:fire.firestore.FieldValue.increment(1)
  });
}
const Mine = () => {
    const kullanici =useTimes()
    return(
      <div className="mine">
        <div>
        <ul className="a">
        <ul className="dik2"><li><button onClick={()=>upgradecopper()}>Upgrade Copper Mine</button>(LVL: {kullanici.copper})</li><li><span><img src={copper} alt="copper"/></span></li></ul>
        </ul>
        </div>
        <li>Account: <span>{kullanici.email} </span></li>
      </div>
      )
    }

export default Mine

我的 Fire.js

import firebase from 'firebase/app';
import 'firebase/firestore'
import 'firebase/auth';



const config = { 
    (there is my api info)
};
const fire = firebase.initializeApp(config);
export default fire;

新建 Fire.js 文件:

import firebase from 'firebase';
import 'firebase/app';
import 'firebase/firestore'
import 'firebase/auth';



const config = { /* COPY THE ACTUAL CONFIG FROM FIREBASE CONSOLE */
    (there is my api info)
};
const fire = firebase.initializeApp(config);
export default fire;

【问题讨论】:

  • 你在Fire.jsFire.ts有什么?
  • @FrankvanPuffelen 也添加了我的 Fire.js 代码

标签: reactjs firebase google-cloud-firestore


【解决方案1】:

您正在导出 FirebaseApp 实例。但是increment 是在FieldValue 常量上声明的。

因此,您还需要将firebase 导入主文件,然后使用firebase.firestore.FieldValue.increment(1),如图所示here

【讨论】:

  • 我将 firebase 导入到我的 Fire.js 文件(显示在编辑中),但直到我将 firebase 导入到我的主文件中它才起作用。请问为什么我必须在同一个文件中导入?为什么不取自 Fire.js 文件?
  • 您不是从Fire.js 导出顶级firebase 对象,而是导出FirebaseApp 实例。 FirebaseApp 没有 FieldValue 属性。换句话说:firebase.firestore.FieldValue 在所有实例之间共享,而firebase.firestore() 为您提供单个实例。
猜你喜欢
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
  • 1970-01-01
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 2012-12-03
  • 1970-01-01
相关资源
最近更新 更多