React Native Viewpager中的自动焦点输入

jdperos

我正在使用React Native Viewpager来接受用户输入,并在按下按钮时移至下一页重要的是要注意,移至下一页是在按下按钮时发生的,而不是通过正常滚动(已禁用)进行的。

我认为处理此问题的最佳方法是在ViewPager上有一个状态,该状态会传播到子项中。

ViewPager.tsx:

export default function ViewPager({ route, navigation }) {

    const ref: React.RefObject<ViewPager> = React.createRef();
    const [currentPage, setCurrentPage] = useState(0);

    let setEntryPage = (page: number) => {
        ref.current?.setPage(page);
        setCurrentPage(page);
    }


    return (
        <View style={{flex: 1}}>
            <ViewPager
                style={styles.viewPager}
                initialPage={0}
                ref={ref}
                scrollEnabled={false}
            >
                {
                    GlobalStuff.map((entry, index) => {
                        return (
                            <Entry
                                key={index}
                                index={index}
                                pagerFocusIndex={currentPage}
                                pagerLength={quizDeck?.litems.length!}
                                setEntryPage={setEntryPage}
                            />
                        )
                    })
                }
            </ViewPager>
        </View>
    );
};

Entry.tsx:

export function Entry(props: EntryProps) {

    const inputRef: React.RefObject<Input> = React.createRef();
    if (props.pagerFocusIndex === props.index) {
        inputRef.current?.focus();
    }

    return (
        <View>
            <Input
                // ...
                ref={inputRef}
            />
            <IconButton
                icon="arrow-right-thick"
                color={colorTheme.green}
                onPress={() => {
                    props.index !== props.pagerLength - 1 ?
                        props.setEntryPage(props.index + 1) :
                        props.navigation!.reset({ index: 0, routes: [{ name: recapScreenName as any }] });
                }}
            />
// ...

不幸的是,inputRef似乎是null,并且可能有一种更好的方式来实现我正在尝试实现的目标。

窗台

每次组件渲染时,渲染循环中的任何内容都会被调用。

    // This is called on every render
    const inputRef: React.RefObject<Input> = React.createRef();
    
    // So is this, it's always null
    if (props.pagerFocusIndex === props.index) {
        inputRef.current?.focus();
    }

产生副作用。

    // Untested
    const inputRef = useRef();

    useEffect(() => {
        if (props.pagerFocusIndex === props.index) {
            inputRef.current?.focus();
        }
    }, [inputRef.current, props.pagerFocusIndex, props.index]);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

React-Native自动完成输入中textInput中的边框

来自分类Dev

不变违规:ViewPagerAndroid已从React Native中移除。“ react-native-viewpager”而非“ react-native”

来自分类Dev

React Native中的zIndex

来自分类Dev

React Native中的海拔

来自分类Dev

在React Native中链接

来自分类Dev

在 React Native 中自动提交 Redux 表单

来自分类Dev

React Native:在ScrollView中更改焦点时键盘关闭

来自分类Dev

react-native中TextInput的焦点样式

来自分类Dev

当react-native中的textinput处于焦点时获取坐标

来自分类常见问题

React Native onPress被自动调用

来自分类Dev

React-Native - InputText 不会失去焦点

来自分类Dev

无法在 react-native 中输入文本输入

来自分类Dev

在React Native中渲染HTML

来自分类Dev

React Native中的透明覆盖

来自分类Dev

在React Native中查看PDF

来自分类Dev

React Native中的动态色彩

来自分类Dev

React Native中的全屏图像

来自分类Dev

React Native中的原生广告

来自分类Dev

React Native中的``全局''模式

来自分类Dev

React Native中的隐藏TextInput

来自分类Dev

React Native中的实时权限

来自分类Dev

React Native中的RTL图表

来自分类Dev

钩在React Native的类中

来自分类Dev

React Native中的客户映射

来自分类Dev

React Native中的渐变滑块?

来自分类Dev

React Native中的条件渲染

来自分类Dev

React Native中的组件异常

来自分类Dev

React Native中的布局设计

来自分类Dev

react-native中的未知