API 仅在我开始输入后呈现(Firebase)

我正在使用 React 和 Firebase 制作一个类似 twitter 的小应用程序,并且遇到了一个小错误。现在,我正在使用 UseEffect 在页面加载时显示我的 firebase 集合,然后将推文映射到页面。然而,这些推文只有在我开始打字后才会显示。这是我拨打电话的方式。


    useEffect(() => {

        let newArray = []

        const getTweets = async () => {

            firebase.firestore().collection('tweet').orderBy('date',

         'desc').onSnapshot((singleTweet) => {

                singleTweet.forEach((element) => {

                    newArray.push(element.data())

                })

            })

            showLoader()            

            setTweets(newArray)

            if (newArray) {

                hideLoader()

            }

        }

        getTweets();

    }, [])


const addTweet = (text) => {

    const newTweets = {}

    newTweets.content = text;

    newTweets.date = new Date().toISOString()

    newTweets.userName = user.displayName

    newTweets.photoURL = user.photoURL

    setTweets([newTweets, ...tweetList])

    firebase.firestore().collection('tweet').add(newTweets)


}

const submitTweetHandler = (event) => {

    event.preventDefault()

    addTweet(inputText)

    setInputText('')

}

这就是我绘制集合的位置:


{tweetList.map((tweet, index) => (<Tweet key={index} tweet={tweet} />))}


哔哔one
浏览 113回答 2
2回答

心有法竹

取决于您可能想要切换到的功能.get但由于这应该像 @Nooruddin 建议的那样是异步的,因此您需要有一个.then才能使用集合的快照尝试:useEffect(() => {&nbsp; const getTweets = async() => {&nbsp; &nbsp; let newArray = []&nbsp; &nbsp; await firebase.firestore().collection('tweet').orderBy('date', 'desc').get()&nbsp; &nbsp; &nbsp; .then(((snapshot) => {&nbsp; &nbsp; &nbsp; &nbsp; snapshot.forEach((singleTweet) => {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newArray.push(singleTweet.data())&nbsp; &nbsp; &nbsp; &nbsp; })&nbsp; &nbsp; &nbsp; }))&nbsp; &nbsp; showLoader()&nbsp; &nbsp; setTweets(newArray)&nbsp; &nbsp; if (newArray) {&nbsp; &nbsp; &nbsp; hideLoader()&nbsp; &nbsp; }&nbsp; }&nbsp; getTweets();}, [])

拉丁的传说

尝试await像这样放置异步useEffect(() => {&nbsp; &nbsp; &nbsp; &nbsp; ...&nbsp; &nbsp; &nbsp; &nbsp; const getTweets = async () => {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; await firebase.firestore().collection('tweet').orderBy('date',&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'desc').onSnapshot((singleTweet) => {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ....&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; })&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ...&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; ...&nbsp; &nbsp; }, [])
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript