Search code examples
javascriptreact-nativerecompose

How do you add refs to functional components using withHandlers in Recompose and call ScrollTo on a ScrollView?


My specific goal is to use the ScrollTo method of a ScrollView but maintain functional component structure.

More generally this requires getting ref to the current component which isn't possible with naked react native.

In Dec 2016 recompose added Allows handlers property of withHandlers to be a factory function but I can't quite figure out how to use it correctly.

How do you add refs to functional components using withHandlers in Recompose and call ScrollTo on a ScrollView?


Solution

  • You can try something like this:

    /* ... */
    
    const MyView = ({ onRef, children }) => (
        <View>
            <ScrollView ref={onRef} /* ... */>
                {children}
            </ScrollView>
        </View>
    )
    
    export default compose(
        withHandlers(() => {
            let myScroll = null;
    
            return {
                onRef: () => (ref) => (myScroll = ref),
                scrollTo: () => (value) => myScroll.scrollTo(value)
            }
        },
        lifecycle({
            componentDidMount() {
                this.props.scrollTo({ x: 0, y: 100, animated: true })
            }
        })
    )(MyView)