有些坑點記錄在我的新博客上:http://www.woke20.com
一.很多時候,一些第三方組件出現的問題,都是因爲在初始化時候沒有第一時間拿到數據(異步請求數據),所有建議在組件之前進行判斷是否有數據再進行渲染。類似如下寫法
1.carousel組件在請求異步數據後,不能自動輪播。
解決技巧:
1.將carousel的autoplay設置爲一個state,默認設置state爲false,當請求到數據後,將state設置爲true就可以解決。
2.在組件之前判斷是否有數據,有數據再進行渲染。
2.carousel組件在請求異步數據後,圖片被隱藏一部分。(因爲組件沒有在初始化時候就拿到數據,所以設置了默認高度爲100px)
解決技巧:
1.可以給數據設置一組默認值
2.在組件之前判斷是否有數據,有數據再進行渲染。(如果用這種方法就不要設置默認值了,影響數據判斷)
3.最近在使用dva時,創建了PureComponent,但是依然發現只要通過dispatch觸發了action,不論是state的值是不是改變了,render函數都會執行(頁面會重新渲染)。比如下面這個函數,每次都是將flag賦值爲true,但是連接該model的頁面依然重新渲染了。
原因:
不論state的值是否改變,每一次通過reducer返回的state都是全新的對象,同時PureComponent進行的只是淺比較,對於引用類型只是比較了其地址。所以會觸發render()
4.z-index失效的幾種情況:
1⃣️.元素未設置定位。z-index是針對設置了定位的元素的(position: static除外的定位)。
2⃣️.父級元素層級低。
5.position: fixed失效
原因:父級元素中使用了transform屬性
解決:將需要position:fixed的元素和使用position的元素放在不同的容器中
6.video在chrome下無法自動播放
原因:chrome禁用音頻自動播放,所以視頻必須靜音才能自動播放。可以添加muted屬性來靜音
二.第三方組件使用
1.aplayer
在react中使用:
onInit()函數很重要,在這裏生成aplayer對象,通過改對象可以添加事件。如果需要退出時候關閉播放器,就可以在componentWillMount()生命週期中,調用aplayer對象的destroy()方法,銷燬播放器。
注意:如果一個頁面有多個播放器,可以在onInit函數中將生成的aplayer對象push進一個數組,通過數組獲取每個播放器。
2. 高德地圖和百度地圖定位
百度地圖: 在使用百度地圖瀏覽器定位時,發現只能獲取到市級。原因:(如果瀏覽器內核是chrome 或者 ios10 ,需要開啓https服務,才能使用瀏覽器定位,不然會採用IP定位,而IP定位只能獲取到市級)。解決方法,升級https。
高德地圖: