YVH*_*YVH 3 javascript firebase reactjs firebase-realtime-database
我正在使用React.js和firebase制作一个应用程序,用户可以在其中输入名称和该人的地址。
Firebase中的对象如下所示:
L1NSTjqA10Qc85d7Kcc
- name: John Doe,
- address: 1 Maple Ave
我已经打印了名称,并成功地将地址打印到DOM上,但是我想按名称的字母顺序对其进行排序。
因此,我的列表如下所示:
Jane Doe - 34 Green Street
John Doe - 1 Maple Ave
Riley Smith - 3 Happy Street
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是我的JSX,用于在父组件上映射对象数组时:
<ul>
{this.state.contacts.map((res)=> <List data={res}/>)}
</ul>
Run Code Online (Sandbox Code Playgroud)
以防万一,这是我的componentDidMount:
componentDidMount() {
const dbRef = firebase.database().ref();
dbRef.on("value", (firebaseData) => {
const itemsArray = [];
const itemsData = firebaseData.val();
for (let itemKey in itemsData) {
itemsArray.push(itemsData[itemKey])
}
this.setState({ contacts: itemsArray})
})
}
Run Code Online (Sandbox Code Playgroud)
我试图从另一个堆栈溢出论坛中执行以下操作,但是它没有用:
const myData = [].concat(this.state.contacts)
.sort((a,b)=> a.name > b.name
.map((res)=> <List data={res}/>);
Run Code Online (Sandbox Code Playgroud)
尝试排序然后映射的逻辑部分可以这样完成。
const myData = this.state.contacts
.sort(function(a, b) {
if(a.name.toLowerCase() < b.name.toLowerCase()) return -1;
if(a.name.toLowerCase() > b.name.toLowerCase()) return 1;
return 0;
})
.map((item, i) => <List key={i} data={item} />);
Run Code Online (Sandbox Code Playgroud)
或者,如果您想做得更短,则可以这样做。
const myData = this.state.contacts
.sort((a, b) => a.name.localeCompare(b.name))
.map((item, i) => <List key={i} data={item} />);
Run Code Online (Sandbox Code Playgroud)
localeCompare功能是一种方法String
在你的方法中
dbRef.on("value", (firebaseData) => {
this.setState({
contacts: Array.from(firebaseData.val()).sort((a, b) => a.name.localeCompare(b.name))})
});
}
Run Code Online (Sandbox Code Playgroud)
在您的render方法中执行以下操作
render () {
return (
<ul>
{
this.state.contacts.map((item, i) => <List key={i} data={item} />)
}
</ul>
);
}
Run Code Online (Sandbox Code Playgroud)
这有帮助吗?
| 归档时间: |
|
| 查看次数: |
9874 次 |
| 最近记录: |