#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
, и это не работает. Это для компонента, который должен знать об определенных событиях на aTextInput
. Я пытаюсь не связывать его плотно и просто заставить его принятьref
. Затем он может настроить поTextInput
мере необходимости.