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

React Native ScrollView - How to scroll to a child component from another child component button?(React Native ScrollView - 如何从另一个子组件按钮滚动到子组件?)
本文介绍了React Native ScrollView - 如何从另一个子组件按钮滚动到子组件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have this structure with a ScrollView, which is a parent with 5 childs

带有 ScrollView 的父组件

Parent Component with ScrollView

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

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

Inside Component3 I have a button that when pressed should scroll parent component ScrollView to 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 (Component3)

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,关于如何父滚动的任何想法?我试图弄清楚我错过了什么,因为那是我第一次接触这个.

And the Comments are the Component5, any idea on how to the parent scroll? I trying to figure what I'm missing, since thats my first contact with this.

推荐答案

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

What i did was..
in component5 I call onLayout in the main view and then save x and y in the parent component. To scroll to it in component 3 on click i call the parent function that uses the scrollview ref to scroll to the values stored before

组件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>
        )
    }
}

这篇关于React Native ScrollView - 如何从另一个子组件按钮滚动到子组件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Update another component when Formik form changes(当Formik表单更改时更新另一个组件)
Formik validation isSubmitting / isValidating not getting set to true(Formik验证正在提交/isValiating未设置为True)
React Validation Max Range Using Formik(使用Formik的Reaction验证最大范围)
Validation using Yup to check string or number length(使用YUP检查字符串或数字长度的验证)
Updating initialValues prop on Formik Form does not update input value(更新Formik表单上的初始值属性不会更新输入值)
password validation with yup and formik(使用YUP和Formick进行密码验证)