Как мне установить опору слушателя на React Native `TextInput` ref

#react-native

Вопрос:

У меня есть необходимость динамически установить OnPressIn опору a TextInput . У меня есть ссылка на TextInput , но я не могу понять, как установить этот метод.

 const inputRef = useRef(null);
<TextInput
  ...
  ref={inputRef)
/>


// inputRef is passed as a prop to another component, then I try to set OnPressIn. Neither of these techniques work:
inputRef.setNativeProps({
   OnPressIn: () => console.log('ONPRESS TRIGGERED'),
});

inputRef.OnPressIn = () => console.log('ONPRESS TRIGGERED');
 

Как я могу установить эту опору на TextInput ссылку?

Ответ №1:

Я полагаю, что вам не хватает «тока».

 inputRef.current.setNativeProps({
   OnPressIn: () => console.log('ONPRESS TRIGGERED'),
});
 

Кроме того, по какому случаю вам onPressIn нужно что-то изменить? Разве не проще использовать условие?

 const handleOnPressIn = () => {
  if (condition) {
    console.log(`ONPRESS TRIGGERED condition: ${condition}`)
  } else {
    console.log(`ONPRESS TRIGGERED condition: ${condition}`)
  } 
}

<TextInput 
  onPressIn={() => handleOnPressIn()}
/>
 

Если вы стремитесь к оптимизации производительности, я считаю, что вам также следует рассмотреть возможность переноса вызова setNativeProps в хук useCallback (), как в документах React Native на setNativeProps для редактирования значения TextInput.

Комментарии:

1. К сожалению, это не работает. В моем примере это неясно, но я перехожу inputRef={inputRef.current} в компонент, а затем вызываю props.inputRef.setNativeProps() . setNativeProps вызывается current , и это не работает. Это для компонента, который должен знать об определенных событиях на a TextInput . Я пытаюсь не связывать его плотно и просто заставить его принять ref . Затем он может настроить по TextInput мере необходимости.