gpt4 book ai didi

javascript - React Native ScrollView - 如何从另一个子组件按钮滚动到子组件?

转载 作者:行者123 更新时间:2023-12-03 00:06:52 24 4
gpt4 key购买 nike

我有一个带有 ScrollView 的结构,它是一个有 5 个 child 的父级

带有ScrollView的父组件

  • 组件1
  • 组件2
  • 组件3
  • 组件 4
  • 组件5

在 Component3 内部,我有一个按钮,按下该按钮应将父组件 ScrollView 滚动到 Component5

类似这样的事情

主页(父级)

export default class Home extends React.Component {      
renderComments() {
return this.state.dataSource.map(item =>
<CommentDetail key={item.id} comment={item} />
);
}

render() {
return (
<ScrollView>
<Component1 />
<Component2 />
<CentralElements {...this.state.dataSource} scroll = {this.props.scroll} />
<Component4 />
<View>
{this.renderComments()}
</View>
</ScrollView>
);
}
}

CentralElements(组件3)

export default class CentralElements extends React.Component {
constructor(props) {
super(props);
}

goToComments= () => {
this.props.scroll.scrollTo({x: ?, y: ?, animated: true});
};

render() {
return (
<ScrollView horizontal={true}>
<TouchableOpacity onPress={this.goToComments}>
<Image source={require('../../assets/image.png')} />
<Text>Comments</Text>
</TouchableOpacity>
...
</TouchableOpacity>
</ScrollView>
);
}
};

评论是 Component5,关于如何父滚动有什么想法吗?我试图弄清楚我错过了什么,因为这是我第一次接触这个。

最佳答案

我所做的是..
在 component5 中,我在主视图中调用 onLayout,然后将 xy 保存在父组件中。要在组件 3 中单击滚动到它,我调用使用 ScrollView 引用滚动到之前存储的值的父函数

组件5

    export default class Component5 extends Component {

saveLayout() {
this.view.measureInWindow((x, y, width, height) => {
this.props.callParentFunction(x, y)
})
}
render() {
return (
<View ref={ref => this.view = ref} onLayout={() => this.saveLayout()}>

</View>
)
}
}

组件3

export default class Component3 extends Component {

render() {
return (
<View >
<TouchableOpacity onPress={()=>{this.props.goToComponent5()}}>

</TouchableOpacity>
</View>
)
}
}

父级:

export default class Parent extends Component {
constructor(props) {
this.goToComponent5=this.goToComponent5.bind(this)
super(props)
this.state = {
x:0,
y:0,
}
}

callParentFunction(x, y) {
this.setState({ x, y })
}

goToComponent5(){
this.ScrollView.scrollTo({x: this.state.x, y: this.state.y, animated: true});
}

render() {
return (
<View >
<ScrollView ref={ref => this.ScrollView = ref}>
<Component1 />
<Component2 />
<Component3 goToComponent5={this.goToComponent5}/>
<Component4 />
<Component5 callParentFunction={this.callParentFunction}/>
</ScrollView>
</View>
)
}
}

关于javascript - React Native ScrollView - 如何从另一个子组件按钮滚动到子组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54928858/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com