如果有人問過這個問題,我很抱歉,但我發現了很多關于按欄位內容排序的問題。我想按欄位名稱排序。我已經嘗試過 orderBy、orderByChild 和 startAt - 這些都不起作用。
我的收藏看起來像這樣:

我希望我的資料始終以“全部”開頭,之后順序無關緊要。這是我獲取資料的方式:
const fetchProjects = async() => {
const catRef = doc(db, 'Portfolio', 'Category')
const catSnap = await getDoc(catRef)
if(catSnap.exists()) {
setCategory(catSnap.data())
}
}
然后我創建按鈕來選擇某些資料欄位,如下所示:
const sortButton = (key) => {
if(filter === key) {
return (<div key={key}>
<button className='prt-act-btn' >{key}</button>
</div>)
} else {
return ( <div key={key}>
<button className='prt-btn' onClick={() => setFilter(`${key}`)}>{key}</button>
</div> )}
}
if(loading || fetching) {
return <p>loading...</p>
}
return (
<>
<p className="pageHeader"> <FaFileArchive/> Portfolio</p>
<div className='center'>
{Object.keys(category).map((key) => (
sortButton(key)
))}
</div>
}
所以基本上問題是我的按鈕在每次重新加載后按順序隨機排列,我想從“全部”開始,然后列出其他類別,如“API”、“區塊鏈”、“資料庫”等。
感謝您的任何幫助!
uj5u.com熱心網友回復:
Javascript 物件不適用于有序資料。從技術上講,物件確實對其鍵有順序,但是您幾乎沒有能力控制該順序,因此不應依賴它。因此,當您這樣做時Object.keys(/* some object */),您應該在心理上將其視為以隨機順序獲取密鑰。您碰巧從 Firestore 檔案中獲取此物件,但任何物件都會發生同樣的事情。
如果您想將密鑰按順序排列,則可以,但您需要添加代碼才能這樣做。.sort函式可以幫助解決這個問題。例如,如果您想將“全部”放在首位,然后按字母順序排列其余部分,您可以這樣做:
{Object.keys(category)
.sort((a, b) => {
if (a === 'All') {
return -1;
} else if (b === 'All') {
return 1;
} else {
return a.localeCompare(b);
}
})
.map(key => sortButton(key))
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/496531.html
上一篇:使用CORS的FirebaseCloudFunctiononRequest未正確回傳回傳錯誤
下一篇:將復選框值保存到firebase
