本番アプリの検証中に見つけた不具合の対応を記載
PR
対応
TextInputにautoFocusを設定しても反応しない事象が発生。
原因は以下の通り。
内容的にはReact Navigation で画面遷移した先の画面でTextInputにautoFocusを設定してもキーボードが表示されない状態になっている。
色々試してみたが、今の所 setTiemOutを仕込む以外に対応方法がなかったので、以下のCustom Hooksを作成。
■ src/hooks/useAutoFocusInput.tsx
import { useRef } from 'react';
import { TextInput } from 'react-native';
import { useFocusEffect } from '@react-navigation/native';
export default function useAutoFocusInput(autoFocus: boolean) {
const ref = useRef<TextInput>(null);
const timeout = useRef<number | null>(null);
useFocusEffect(() => {
if (autoFocus) {
timeout.current = Number(setTimeout(() => ref.current?.focus(), 300));
}
return () => {
if (timeout.current) {
clearTimeout(timeout.current);
}
};
});
return {
ref,
autoFocus: false,
};
}
画面のフォーカスのイベント発生時から、setTimeoutでTextInputのフォーカスを実行するCustom Hooksを作成して、以下の通りに使用。
■ src/components/atoms/TextInput/TextInput.tsx
import React from 'react';
import {
TextInput as RNTextInput,
TextInputProps,
} from 'react-native';
import useAutoFocusInput from 'hooks/useAutoFocusInput';
type Props = TextInputProps;
const TextInput: React.FC<Props> = (props) => {
const autoFocusProps = useAutoFocusInput(props.autoFocus || false);
return (
<RNTextInput
{...props}
{...autoFocusProps}
placeholderTextColor={theme().color.base.main}
style={style}
autoCapitalize="none"
/>
);
};
これで画面開いた時にキーボード表示がされるようになった。

setTimeoutは使いたくなかったが、現状これしか対応方法が無さ気だったので 😓、こちらで対応 。