I know we can do this easily with react class method.because we have this.ref. but I am not sure how to do this with useRef hook in functional component.
using tricks written here
This is how I am trying to do this.
...
const inputEl1 = useRef(null);
const inputEl2 = useRef(null);
return (
<Field
name="first_name"
component={MyTextInput}
placeholder="First name"
ref={inputEl1}
refField={inputEl1}
onEnter={() => {
inputEl2.current.focus();
}}
/>
/>
<Field
name="last_name"
placeholder="Last name"
component={MyTextInput}
ref={inputEl2}
refField={inputEl2}
/>
)
...
So I need to pass ref from field to MyTextInput and on nextKeyPress I want to focus to second input component i.e inputEl2
// My Text Input
...
render() {
const {
input: { value, onChange, onBlur },
meta: { touched, error },
keyboardType,
placeholder,
secureTextEntry,
editable,
selectTextOnFocus,
style,
selectable,
customValue,
underlineColorAndroid,
autoFocus,
maxLength,
returnKeyType,
onEnter,
refField,
} = this.props;
const { passwordVisibility, undelineColor } = this.state;
return (
<View style={{ marginVertical: 8 }}>
<TextInput
style={[{
height: 50,
paddingLeft: 20,
color: Colors.SECONDARY_COMMON,
}, style]}
onBlur={val => onBlur(val)}
keyboardType={keyboardType}
underlineColorAndroid={undelineColor}
placeholder={placeholder}
returnKeyType={returnKeyType || 'go'}
value={customValue || value.toString()}
onChangeText={onChange}
maxLength={maxLength}
onSubmitEditing={onEnter}
ref={refField}
/>
)
}
const inputEl2 = useRef(null);
<TextInput
name="first_name"
placeholder="First name"
onSubmitEditing={() => inputEl2.current.focus()}
/>
<TextInput
name="last_name"
placeholder="Last name"
ref={inputEl2}
/>
it worked for me
If it is a child component you are trying to get the ref of, you need to pass the prop as some other name rather than ref.
This method worked for me
For hooks, useRef to init ref.
const passwordInput = useRef(null);
Use a different name for ref prop for custom component, e.g. inputRef.
<CustomInput
inputRef={ passwordInput }
/>
Child component - Set ref as custom ref prop.
const CustomInput = props => {
const { inputRef } = props;
return ( <TextInput
{ ...props }
ref={ inputRef }
/> );
};
If a child needs to use a prop like a ref as in <TextInput ref={refField}..., then the prop needs to be a ref (not a string):
<Field refField={inputEl2} ...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With