2017-09-24 82 views
1

這是我的代碼的摘錄:onLayout不會被調用

render() { 
    console.log("first log"); 
    return (
     <View onLayout={e => console.log("second log")}> 
... 

控制檯顯示「第一次登錄」,而不是第二個。該視圖似乎正確呈現。我嘗試了其他意見,但結果是一樣的。 我使用react-native 0.48.4。

回答

0

剛更新爲react-native 0.48.4,我無法在iOS或Android上重現錯誤。然而,由於你不使用你的「E」,你也許應該更改代碼以

<View onLayout={() => console.log('second log')}> 

甚至

<View onLayout={console.log("second log")}> 
1

我解決了這個改變初始高度大於0,則onLayout函數成功當ChildView的佈局已更改時觸發。

constructor(props) { 
 
    super(props); 
 
    this.state = { 
 
     title: '', 
 
     height: 0 // changed to 1 
 
    }; 
 
    } 
 
    onLayout = (event) => { 
 
    console.log('on layout:') 
 
    const { 
 
     x, 
 
     y, 
 
     width, 
 
     height 
 
    } = event.nativeEvent.layout; 
 
    console.log(x, y, width, height); 
 
    } 
 
    render() { 
 
    return (
 
     <View style={[styles.container, {height: this.state.height}]}> 
 
     <View onLayout={this.onLayout}> 
 
      <ChildView/> 
 
     </View> 
 
     </View> 
 
    ) 
 
    }

由於這一重大更改: 安卓:只有調用onLayout佈局時,實際上已經改變了 https://github.com/facebook/react-native/wiki/Breaking-Changes#android-only-call-onlayout-when-layout-has-actually-changed-15429e---astreet

+0

感謝您的評論。我沒有寫清楚。我解決了問題沒有問一個新的問題。我昨天加入了stackoverflow以回答這個問題。做了編輯。希望它會幫助:) – Jiana