本番アプリの検証中に見つけた不具合の対応を記載
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は使いたくなかったが、現状これしか対応方法が無さ気だったので 😓、こちらで対応 。