onLayout没有被召唤

时间:2017-09-24 10:27:24

标签: react-native

这是我的代码的摘录:

{{1}}

控制台显示“第一个日志”,但不显示第二个日志。视图似乎正确呈现。我尝试了其他视图,但结果是一样的。 我正在使用react-native 0.48.4。

3 个答案:

答案 0 :(得分:4)

我通过更改大于0的初始高度解决了这个问题,然后在更改了ChildView的布局时成功触发了onLayout函数。



  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>
    )
  }
&#13;
&#13;
&#13;

由于这个突破性变化: Android:仅在布局实际更改时调用onLayout https://github.com/facebook/react-native/wiki/Breaking-Changes#android-only-call-onlayout-when-layout-has-actually-changed-15429e---astreet

答案 1 :(得分:0)

在我的案例中,onLayout之所以没有被调用是因为项目是在FlatList中渲染的,因此在装载时仅渲染了几个项目。

答案 2 :(得分:-3)

刚刚更新为react-native 0.48.4,我无法在iOS或Android上重现错误。但是,由于您没有使用“e”,因此您应该将代码更改为

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

甚至

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