【问题标题】:I am getting data from firebase after page refresh in react我在反应页面刷新后从firebase获取数据
【发布时间】:2021-02-02 08:29:30
【问题描述】:

我正在尝试使用 firebase 作为后端在您的订单页面中呈现订单列表,并作为前端做出反应。当我单击您的订单按钮时​​,它什么也不显示,刷新页面时它显示数据。我希望在不刷新页面的情况下显示数据。 这是我的以下问题的代码。

import React , {useState , useContext ,  useEffect} from 'react'
import { useParams } from 'react-router-dom'
import { JobContext } from '../../context/JobContext'
import { UserContext } from '../../context/UserContext'
import { db } from '../../Firebase'
import Order from './Order'
import './YourOrder.css';
import { Container, Row } from 'react-bootstrap';
import { IoIosShare } from "react-icons/io";
import { BsChevronRight } from "react-icons/bs";
import { Link } from 'react-router-dom'
import { PaymentContext } from '../../context/PaymentContext'
import { OrderContext } from '../../context/OrderContext'

const YourOrder = () => {
    //window.location.reload(false)
    const [user , setUser]=useContext(UserContext)
    const [order , setOrder]=useContext(OrderContext)
    const { userrid } = useParams()
    const [payment , setPayment]=useContext(PaymentContext)

    useEffect(() => {

      var priceRef =  db.collection("clients").doc(userrid).collection("jobDetails")
      priceRef.orderBy("timestamp", "desc").get().then(snapshot=>{
 
       setOrder(snapshot.docs.map((doc) => ({ jobdetailid: doc.id, ...doc.data() })))
 
 
      })
     
    }, [user , order])

  
     
      

    return (       
      <div className="All_orders_main_container">
       <h2 className="text-center mb-2">Your Orders</h2>

        {order.length!==0 ?
         
          order.map(item=>{
        
            
            return item.payment_id!=="" ?<Link to={`/vieworder/${item.jobdetailid}/${userrid}`} >
            <Container className="your-orders">

            <div className="col-xl-12 col-lg-12 col-md-12 col-sm-12 col-12 pl-0">
            </div>
            <div className="col-xl-12 col-lg-12 col-md-12 col-sm-12 col-12 bordered">
              <div className="row">
                <div className="col-xl-2 col-lg-2 col-md-4 col-sm-4 col-4">
                  <img src={item.image} alt="graphic_design_ordered-img" className="order_img"/>
                </div>
                <div className="col-xl-9 col-lg-9 col-md-6 col-sm-6 col-6 details">
                  <p className="job_name">{item.Name}</p>
                  <p className="job_deliverydate">ordered on {item.orderDate}</p>
                  {/* <p className="job_share pt-1"><IoIosShare className="share_icon"/>Share this item</p> */}
                </div>
                <div className="col-lg-1 col-md-2 col-sm-2 col-2 open_icon text-right">
                  <BsChevronRight/>
                </div>
              </div> 
            </div>
            </Container>
            </Link>
          : null
          })
         : 
         <h1 className="text-center" style={{color : '#c1c1c1', marginTop: 50}}>No Orders</h1>

        }    
      
      
    </div>
    )
}

export default YourOrder

请给我同样的指导

【问题讨论】:

  • 嗨,your order button 在哪里?
  • 该按钮位于主页导航栏上,当有人点击该按钮时,它会将其重定向到您的订单页面

标签: javascript reactjs firebase developer-tools


【解决方案1】:

您可以使用onSnapshot(),它可以让您的应用“监听”某个文档或多个文档的更改。 https://firebase.google.com/docs/firestore/query-data/listen

【讨论】:

  • 我也用过onsnapshot但是数据还是取不出来,刷新后显示
【解决方案2】:

由于我们知道数据传输需要时间,我们必须等待响应,或者您必须使用 onSnapShot() 方法等待来自 firebase 的响应,然后设置您的项目列表,

根据评论,尝试从 useEffect 中删除 [user , order] 因为它只会在用户或订单列表发生更改时呈现您的内容,因此只需将其作为空列表传递,因此它会触发启动,

示例:

const [orders, setOrders] = useState([]);
useEffect(()=>{
   //The logic here will fire on startup , thus setting your order state from here will work 
    setOrders() //from here
}, [])

这是本地设置的方法,如果您希望您的数据全局可用,我看到您正在使用上下文,因此使用 Reducers 设置状态声明一个方法并在您获取数据后在这里调用它 请按照上述方法进行

快乐编码

【讨论】:

  • 我也用过onSnapshot方法,结果还是一样
  • 删除用户和订单后结果还是一样
  • 这是因为你是在脚本之外设置的,就像你使用useContext而不是使用useState,
  • 它不再工作了,我几乎尝试了所有方法,但页面刷新后显示数据。
  • 请从您的全局上下文中使用 Reducers 并将您的数据设置在那里..
猜你喜欢
  • 1970-01-01
  • 2019-03-07
  • 1970-01-01
  • 2019-07-20
  • 1970-01-01
  • 1970-01-01
  • 2019-05-12
  • 2021-05-29
  • 1970-01-01
相关资源
最近更新 更多