Bir tepki app bir firestore zaman damgası görüntülemek nasıl anlamaya çalışıyorum.
Oluşturulan alan adlı bir firestore belgem var.
Çıktı listesine dahil etmeye çalışıyorum (ilgili bitlerin ayıklanması, böylece tüm alanların listesini okumak zorunda değilsiniz).
componentDidMount() {
this.setState({ loading: true });
this.unsubscribe = this.props.firebase
.users()
.onSnapshot(snapshot => {
let users = [];
snapshot.forEach(doc =>
users.push({ ...doc.data(), uid: doc.id }),
);
this.setState({
users,
loading: false,
});
});
}
componentWillUnmount() {
this.unsubscribe();
}
render() {
const { users, loading } = this.state;
return (
<div>
{loading && <div>Loading ...</div>}
{users.map(user => (
<Paragraph key={user.uid}>
<key={user.uid}>
{user.email}
{user.name}
{user.createdAt.toDate()}
{user.createdAt.toDate}
{user.createdAt.toDate()).toDateString()}
Oluşturulmayacak tek özellik tarihtir.
Yukarıdaki denemelerin her biri şu hata mesajı verir:
TypeError: undefined öğesinin 'toDate' özelliği okunamıyor
Gördüğüm bu yazı ve bu yazı ve bu yazı ve bu yazı ve bu Todate önermek onlar gibi diğerleri, () çalışmalıdır. Ancak - bu uzantı benim için bir hata veriyor - toString uzantısını denediğimde dahil.
Firestore'da bir şey olduğunu biliyorum çünkü user.createdAt'ı denediğimde, içinde saniye olan bir nesne bulduğunu söyleyen bir hata alıyorum.
Aşağıdaki Waelmas'tan örnek alarak, alanın çıktısını şöyle kaydetmeye çalıştım:
this.db.collection('users').doc('HnH5TeCU1lUjeTqAYJ34ycjt78w22').get().then(function(doc) {
console.log(doc.data().createdAt.toDate());
}
Ben de bu benim harita deyim eklemeyi denedim ama user.get bir işlev değil diyor bir hata alıyorum.
{user.get().then(function(doc) {
console.log(doc.data().createdAt.toDate());}
)}
Yukarıdaki ile aynı hata mesajını üretir.
SONRAKİ GİRİŞ
Firestore'da bir tarihi kaydetmenin bir yolunu bulmaya çalışırken ortaya çıkan garip bir şey, daha sonra tekrar okumama izin veriyor, bu formülü kullanmak için gönderme işleyicimi bir biçimde değiştirdiğimde:
handleCreate = (event) => {
const { form } = this.formRef.props;
form.validateFields((err, values) => {
if (err) {
return;
};
const payload = {
name: values.name,
// createdAt: this.fieldValue.Timestamp()
// createdAt: this.props.firebase.fieldValue.serverTimestamp()
}
console.log("formvalues", payload);
// console.log(_firebase.fieldValue.serverTimestamp());
this.props.firebase
.doCreateUserWithEmailAndPassword(values.email, values.password)
.then(authUser => {
return this.props.firebase.user(authUser.user.uid).set(
{
name: values.name,
email: values.email,
createdAt: new Date()
// .toISOString()
// createdAt: this.props.firebase.fieldValue.serverTimestamp()
},
{ merge: true },
);
// console.log(this.props.firebase.fieldValue.serverTimestamp())
})
.then(() => {
return this.props.firebase.doSendEmailVerification();
})
// .then(() => {message.success("Success") })
.then(() => {
this.setState({ ...initialValues });
this.props.history.push(ROUTES.DASHBOARD);
})
});
event.preventDefault();
};
Bu veritabanına bir tarih kaydetmek için çalışır.
Firestore girişinin formu şuna benzer:
Bu bileşende bir tarih görüntülemeye çalışıyorum:
class UserList extends Component {
constructor(props) {
super(props);
this.state = {
loading: false,
users: [],
};
}
componentDidMount() {
this.setState({ loading: true });
this.unsubscribe = this.props.firebase
.users()
.onSnapshot(snapshot => {
let users = [];
snapshot.forEach(doc =>
users.push({ ...doc.data(), uid: doc.id }),
);
this.setState({
users,
loading: false,
});
});
}
componentWillUnmount() {
this.unsubscribe();
}
render() {
const { users, loading } = this.state;
return (
<div>
{loading && <div>Loading ...</div>}
<List
itemLayout="horizontal"
dataSource={users}
renderItem={item => (
<List.Item key={item.uid}>
<List.Item.Meta
title={item.name}
description={item.organisation}
/>
{item.email}
{item.createdAt}
{item.createdAt.toDate()}
{item.createdAt.toDate().toISOString()}
</List.Item>
// )
)}
/>
</div>
);
}
}
export default withFirebase(UserList);
Tekrar okumaya çalıştığımda - kullanarak:
{İtem.email}
Hata mesajında şunlar bulunur:
Hata: Nesneler bir Reaksiyon alt öğesi olarak geçerli değil (bulunan: Zaman damgası (saniye = 1576363035, nanosaniye = 52000000)). Bir çocuk koleksiyonu oluşturmak istiyorsanız, bunun yerine bir dizi kullanın. Öğe'de (UserIndex.jsx'te: 74)
Bu girişimlerin her birini kullanmayı denediğimde:
{item.createdAt}
{item.createdAt.toDate()}
{item.createdAt.toDate().toISOString()}
Bir hata mesajı alıyorum:
TypeError: undefined öğesinin 'toDate' özelliği okunamıyor
Aynı belgede diğer alanlara kaydedilmiş girdileri okuma yeteneğine dayanarak, bunların herhangi birinin istediğim şekilde biçimlendirilmemişse çıktı üretmek için çalışmasını bekliyorum. Bu olmaz.
SONRAKİ GİRİŞ
Waelmas'ın örneğini alarak, talimatları takip etmeye çalıştım, ancak aynı cevabı alamadığımız ilk adım. Walemas .toDate () uzantısına dayalı bir çıktı alır, ben toDate () bir işlev olmadığını söyleyerek bir hata alıyorum.
Firebase belgelerine uygun olarak denedim:
const docRef = this.props.firebase.db.collection("users").doc("HnH5TeCU1lUjeTqAYJ34ycjt78w22");
docRef.get().then(function(docRef) {
if (doc.exists) {
console.log("Document createdAt:", docRef.createdAt.toDate());
}})
Bu sözdizimi ile bir dizi hata üretir ve onların etrafında bir yol bulamıyorum.
SONRAKİ GİRİŞ
Daha sonra, kullanıcı formunun kimlik doğrulama özelliği olmadan bunu keşfedip edemeyeceğimi görmek için yeni bir form oluşturmayı denedim.
Ben girdi olarak alır bir formu var:
this.props.firebase.db.collection("insights").add({
title: title,
text: text,
// createdAt1: new Date(),
createdAt: this.props.firebase.fieldValue.serverTimestamp()
})
Önceki formda, yeni Date () girişimi veritabanında bir tarih kaydetmeye çalıştığında, bu örnekte createAt ve createdAt1 alanlarının her ikisi de aynı veritabanı girişini oluşturur:
<div>{item.createdAt.toDate()}</div>
<div>{item.createdAt.toDate()}</div>
Tarihlerin değerini çıkarmaya çalıştığımda, ilki şöyle bir hata oluşturur:
Nesneler bir Reaksiyon çocuğu olarak geçerli değil (bulunan: 15 Aralık 2019 Pazar 21:33:32 GMT + 1100 (Avustralya Doğu Yaz Saati)). Bir çocuk koleksiyonu oluşturmak istiyorsanız bunun yerine bir dizi kullanın
İkincisi şu hatayı üretir:
TypeError: undefined öğesinin 'toDate' özelliği okunamıyor
Bir sonraki adımda ne yapacağınıza dair fikirler için takılıp kaldım.
Aşağıdakilerin yararlı bir şeyler yapabileceğini öneren bu yayını gördüm :
{item.createdAt1.Date.valueOf()}
Öyle değil. Şu hata mesajı verir:
TypeError: undefined öğesinin 'Date' özelliği okunamıyor
Bu gönderi benimle aynı sorunu yaşıyor gibi görünüyor, ancak depoladıkları tarih değerini göstermeyi nasıl başardıklarına bakmıyorlar.
Bu gönderi dizi hata iletisinde takılı kalıyor gibi görünüyor, ancak createAt.toDate () kullanarak bir tarihin nasıl görüntüleneceğini anladıkları anlaşılıyor