如何在 React Native 中延迟渲染或在找到数据后进行渲染
How to delay rendering in React Native or make rendering happen after the data is found
Image of Code
所以我有一个问题,关于如何在从数据库加载数据后 运行 在 React Native 中呈现。在我的代码中,我想列出处方,但在执行到达 firebase 并获取处方数据的代码之前,它会尝试在呈现函数中加载处方时不断出错。我该怎么做才能在收集到 Firebase 数据后进行渲染。
最简单的方法是在 React 中有一个 loading
状态,这可以默认为 true
,一旦从 Firebase 检索到数据,您就将其设置为 false。然后在您的 jsx 中,当加载状态为 true 时,您可以 return 加载器或类似的东西,并且仅在 Firebase 数据可用且加载设置为 false 时才渲染依赖于 Firebase 数据的屏幕的其余部分。这是此概念的最小演示:
https://codesandbox.io/s/great-shockley-i6khsm?file=/src/App.js
import { ActivityIndicator, Text } from "react-native";
const App = () => {
const [loading, setLoading] = useState(true);
useEffect(() => {
// This is where you would have your Firebase function.
setTimeout(() => setLoading(false), 5000);
}, []);
if (loading) {
return <ActivityIndicator />;
}
return <Text>This is my app showing Firebase data</Text>;
};
export default App;
如果您想进一步阅读并在 Firebase 函数失败时处理潜在的错误状态,那么这里有一篇简洁的文章可以避免 anti-pattern 出现加载、成功和错误状态。 https://dev.to/tehaisperlis/the-loading-anti-pattern-7jj
如果您查看此处的文档 (https://rnfirebase.io/firestore/usage)
这是get()
例子
import firestore from '@react-native-firebase/firestore';
const users = await firestore().collection('Users').get();
const user = await firestore().collection('Users').doc('ABC').get();
这意味着您必须通过 async/await 获取()此数据,所以请在下面执行此操作
useEffect(()=>{
const fetch = async ()=>{
/*
Your get code here
*/
const users = await firestore().collection('Users').get();
}
// Call fetch
fetch();
},[])
Image of Code
所以我有一个问题,关于如何在从数据库加载数据后 运行 在 React Native 中呈现。在我的代码中,我想列出处方,但在执行到达 firebase 并获取处方数据的代码之前,它会尝试在呈现函数中加载处方时不断出错。我该怎么做才能在收集到 Firebase 数据后进行渲染。
最简单的方法是在 React 中有一个 loading
状态,这可以默认为 true
,一旦从 Firebase 检索到数据,您就将其设置为 false。然后在您的 jsx 中,当加载状态为 true 时,您可以 return 加载器或类似的东西,并且仅在 Firebase 数据可用且加载设置为 false 时才渲染依赖于 Firebase 数据的屏幕的其余部分。这是此概念的最小演示:
https://codesandbox.io/s/great-shockley-i6khsm?file=/src/App.js
import { ActivityIndicator, Text } from "react-native";
const App = () => {
const [loading, setLoading] = useState(true);
useEffect(() => {
// This is where you would have your Firebase function.
setTimeout(() => setLoading(false), 5000);
}, []);
if (loading) {
return <ActivityIndicator />;
}
return <Text>This is my app showing Firebase data</Text>;
};
export default App;
如果您想进一步阅读并在 Firebase 函数失败时处理潜在的错误状态,那么这里有一篇简洁的文章可以避免 anti-pattern 出现加载、成功和错误状态。 https://dev.to/tehaisperlis/the-loading-anti-pattern-7jj
如果您查看此处的文档 (https://rnfirebase.io/firestore/usage)
这是get()
例子
import firestore from '@react-native-firebase/firestore';
const users = await firestore().collection('Users').get();
const user = await firestore().collection('Users').doc('ABC').get();
这意味着您必须通过 async/await 获取()此数据,所以请在下面执行此操作
useEffect(()=>{
const fetch = async ()=>{
/*
Your get code here
*/
const users = await firestore().collection('Users').get();
}
// Call fetch
fetch();
},[])