反应本机状态 console.log
React Native state console.log
我正在为我的应用程序和我读取的数据使用 firebase 我想把它放在不同的地方使用它的状态。
它有点管用,但是当我想 console.log 它每秒更新 30 次的状态时,我是不是做错了什么?
这是我的代码
const db = firebase.firestore();
const [PBS1Detail, setPBS1Detail] = useState();
db.collection('Track').get().then((snapshot) => {
snapshot.docs.forEach(doc => {
renderTracks(doc)
}
)
});
const renderTracks = (doc) => {
let data = doc.data().data[0].Module;
return setPBS1Detail(data);
}
console.log(PBS1Detail)
我已经尝试将它存储在变量而不是状态中,但这对我不起作用,我无法从函数 global
中获取变量
我是菜鸟我明白了xd
设置状态时不需要 return 语句。此外,看起来您正在执行一些异步功能,这意味着当您的组件第一次呈现时,PBS1Detail 将是未定义的,因为数据库是一个待定的 Promise。
您 could/should 将您的异步函数放在 useEffect 挂钩中:
useEffect(()=> {
db.collection('Track').get().then((snapshot) => {
snapshot.docs.forEach(doc => {
renderTracks(doc)
}
)
});
}, [])
const renderTracks = (doc) => {
let data = doc.data().data[0].Module;
setPBS1Detail(data);
}
最后,您的 renderTracks 函数似乎不正确,因为您似乎每次都在循环访问文档并重置状态。
相反,可以考虑为 PBS1Detail 设置一个数组
const [PBS1Detail, setPBS1Detail] = useState([]);
然后修改你的异步调用:
useEffect(()=> {
db.collection('Track').get().then((snapshot) => {
let results = []
snapshot.docs.forEach(doc => {
results.push(renderTracks(doc))
}
)
setPBS1Detail(results)
});
}, [])
const renderTracks = (doc) => {
return doc.data().data[0].Module;
}
这样您只需设置一次状态,从而避免不必要的重新渲染,并且您可以保存所有文档而不是覆盖它们。
我正在为我的应用程序和我读取的数据使用 firebase 我想把它放在不同的地方使用它的状态。
它有点管用,但是当我想 console.log 它每秒更新 30 次的状态时,我是不是做错了什么?
这是我的代码
const db = firebase.firestore();
const [PBS1Detail, setPBS1Detail] = useState();
db.collection('Track').get().then((snapshot) => {
snapshot.docs.forEach(doc => {
renderTracks(doc)
}
)
});
const renderTracks = (doc) => {
let data = doc.data().data[0].Module;
return setPBS1Detail(data);
}
console.log(PBS1Detail)
我已经尝试将它存储在变量而不是状态中,但这对我不起作用,我无法从函数 global
中获取变量我是菜鸟我明白了xd
设置状态时不需要 return 语句。此外,看起来您正在执行一些异步功能,这意味着当您的组件第一次呈现时,PBS1Detail 将是未定义的,因为数据库是一个待定的 Promise。
您 could/should 将您的异步函数放在 useEffect 挂钩中:
useEffect(()=> {
db.collection('Track').get().then((snapshot) => {
snapshot.docs.forEach(doc => {
renderTracks(doc)
}
)
});
}, [])
const renderTracks = (doc) => {
let data = doc.data().data[0].Module;
setPBS1Detail(data);
}
最后,您的 renderTracks 函数似乎不正确,因为您似乎每次都在循环访问文档并重置状态。
相反,可以考虑为 PBS1Detail 设置一个数组
const [PBS1Detail, setPBS1Detail] = useState([]);
然后修改你的异步调用:
useEffect(()=> {
db.collection('Track').get().then((snapshot) => {
let results = []
snapshot.docs.forEach(doc => {
results.push(renderTracks(doc))
}
)
setPBS1Detail(results)
});
}, [])
const renderTracks = (doc) => {
return doc.data().data[0].Module;
}
这样您只需设置一次状态,从而避免不必要的重新渲染,并且您可以保存所有文档而不是覆盖它们。