當咱們首次打開一個app的時候會請求接口獲取數據,那麼獲取數據的這段時間展現什麼給用戶呢?國內不少app都是千篇一概的用一個菊花代替(俗稱loading),或者更有心一點的作一個好看一點的loading,可是這樣當拿到數據渲染頁面的時候會很生硬的切換,總感受很low。git
facebook首頁列表是用一個接近真實佈局的骨架動畫來代替loading,這東西能夠稱之爲skeleton screen或者placeholder,可是翻譯過來真不知道該翻譯成什麼合適,這麼作的好處就是在內容加載完成後能夠作到流暢無縫切換真實佈局,細節決定產品的質量,我以爲facebook對用戶體驗,交互的細節作的挺不錯。先上一張個人fb截圖。github
rn-placeholder是rn版本的placeholder,我在次基礎上作了對flastlist,listview,SectionList的適配封裝。先看一下在個人開源項目中的效果:npm
看完上面的效果是否是感受比傳統的loading要舒服多了,下面是example:bash
一:flastlist,listview,SectionList使用demoapp
import { ListItem, ListParagraph } from 'components';
export default class Zi extends Component {
render() {
const { loading } = this.props;
return (
<ListParagraph
ParagraphLength={4} // 要渲染的條數
isLoading={loading} // loading狀態
hasTitle // 是否須要title
list={this.sectionList} // 這就是SectionList的函數
/>
);
}
}複製代碼
注:ListParagraph組件目前在我開源項目中,尚未添加到npm,有須要的到我項目中拿,項目地址在文章末尾函數
二:左圖右內容佈局佈局
import Placeholder from 'rn-placeholder';
export default class Cheng extends Component {
render() {
return <Placeholder.ImageContent
size={60}
animate="fade"
lineNumber={4}
lineSpacing={5}
lastLineWidth="70%"
onReady={this.state.isReady}
>
<Text>左圖右內容佈局</Text>
</Placeholder.ImageContent>
}
}複製代碼
三:段落佈局動畫
import Placeholder from 'rn-placeholder';
export default class Cheng extends Component {
render() {
return <Placeholder.Paragraph
size={60}
animate="fade"
lineNumber={4}
lineSpacing={5}
lastLineWidth="30%"
onReady={this.state.isReady}
>
<Text>段落佈局</Text>
</Placeholder.Paragraph>
}
}複製代碼
四:還有Line(行佈局),Media(圖片佈局),使用方法跟 三 同樣。ui
完美收官!
項目demo地址:github.com/duheng/Mozi
THE END!this