Если в любом случае существует хотя бы один вход (не отображается условно), то вы можете установить его фокусировку и размыть следующую строку, используя только один createRef()
.
onSwitchPicker = () => {
this.specialInputRef.current.focus();
this.specialInputRef.current.blur();
}
Не уверен, будет ли это прокручиваться в React Native или нет. Если он прокручивается - а это определенно плохой пользовательский опыт - у вас может быть N ссылок:
onSwitchPicker = () => {
this.inputRef1.current.blur();
this.inputRef2.current.blur();
this.inputRef3.current.blur();
this.inputRef4.current.blur();
}
Единственный способ, которым я вижу, как сделать его короче, - это иметь массив ссылок:
constructor(props) {
super(props);
this.inputRefs = new Array(10).fill().map(() => React.createRef());
}
onSwitchPicker = () => {
this.inputRefs.forEach(({ current }) => {
if (current) current.blur();
});
}
render() {
....
<input ref={this.inputRefs[0]} ...
...
<input ref={this.inputRefs[1]} ...
...
<input ref={this.inputRefs[11]} ...
....
Но если есть условный рендеринг, я бы предпочел использовать шаблонный код вместо массива. Если по ошибке использовать один и тот же индекс для двух входов, могут возникнуть трудноуловимые ошибки:
{someCondition && <input ref={this.inputRefs[4]} ...}
....
{someOtherCondition && <input ref={this.inputRefs[4]} ...}
Тогда иногда у вашего пользователя будут случаи, когда фокус остается в поле (я все еще не знаю в чем смысл, но думаю, это должно каким-то образом повлиять на пользовательский интерфейс). Но это может быть трудно воспроизвести, если пользователь не уловит все условия.