Working with an array of refs in React

This is how you’d tap “next” to select the next TextInput when you have an arbitrary amount of inputs

function Container({ items }) {
  const inputRef = useRef<TextInput[]>([]);
  return (
    <View>
      {items.map((item, index) => (
        <TextInput
          key={item.id}
          ref={(node) => {
            if (node) {
              inputRef.current[index] = node;
            }
          }}
          onSubmitEditing={() => {
            const next = inputRef.current[index + 1];
            if (next) {
              next.focus();
            }
          }}
        />
      ))}
    </View>
  );
}

Say that you create a custom TextInput called MyCustomTextInput, you’ll have to forward the ref:

const CustomTextInput = forwardRef((props, ref) => {
  return <TextInput ref={ref} {...props} />;
});

function Container({ items }) {
  const inputRef = useRef<TextInput[]>([]);
  return (
    <View>
      {items.map((item, index) => (
        <CustomTextInput
          key={item.id}
          ref={(node) => {
            if (node) {
              inputRef.current[index] = node;
            }
          }}
          onSubmitEditing={() => {
            const next = inputRef.current[index + 1];
            if (next) {
              next.focus();
            }
          }}
        />
      ))}
    </View>
  );
}

That should do it!

  • Avatar for Peter
  • Avatar for Peter
  • Avatar for Peter
  • Avatar for Peter
  • Avatar for Peter