Quantcast
Channel: Active questions tagged react-native+typescript - Stack Overflow
Viewing all articles
Browse latest Browse all 6287

React Native - Multiple custom components focuses at the same time

$
0
0

I am newbie to react native with expo, I have created a functional component that tries to do things similar to the behavior of the TextInput of react-native-paper, with animations and so on.

The problem is I have several instances of this component on the same screen and when I press on the first one to write to it, the rest of them also get focused. And if I fill any text in the first one, the second one triggers the notifications without having been touched.

I am using formik, Yup and typescript.

This is the initial state

When I press on the first component, the rest get focus

When I write on the first component, the validation triggers on the second one.

This is how I call the component in the form:

    ...<ScrollView><FloatingLabelInput          label="Ciudad"          marginBottom={20}          onChangeText={text => {            formik.setFieldValue('city', text)          }}          value={formik.values.city}          error={formik.errors.city}        /><FloatingLabelInput          label="Calle principal"          marginBottom={20}          onChangeText={text => {            formik.setFieldValue('mainStreet', text)          }}          value={formik.values.mainStreet}          error={formik.errors.mainStreet}        /></ScrollView>    ....

The component definition:

    ...export default function FloatingLabelInput(props: FloatingLabelInputProps) {  const { label, style, onChangeText, value, error, containerStyle, border } = props  useEffect(() => {    if (value === '') {      resetViewTransition.start()      resetLabelTransition.start()    }  }, [value])  const handleFocus = () => {    animateViewTransition.start()    animateLabelTransition.start()  }  const handleBlur = () => {    if (value === '') {      resetViewTransition.start()      resetLabelTransition.start()    }  }  const handleTextChange = (text: string) => {    if (text.length > 0) {      animateViewTransition.start()      animateLabelTransition.start()    }    onChangeText && onChangeText(text)  }  return (<View style={styles(marginBottom).mainContainer}><Animated.View style={[styles().container, error ? styles().containerError : border !== undefined && { borderColor: viewAnimationBorderColor(border) }, containerStyle]}><Animated.Text style={[styles().labelStyle, { top: labelAnimationTop, fontSize: labelAnimationFontSize, color: labelAnimationColor }]}>{label}</Animated.Text>        {secureTextEntry && <Icon name={passwordShown ? 'eye-outline' : 'eye-off-outline'} size={25} style={styles().eye} onPress={() => setPasswordShown(!passwordShown)} />}<TextInput          selectionColor={error ? colors.fireEngineRed : border ? border : colors.nightRider}          underlineColorAndroid="transparent"          style={[styles().input, { color: error ? colors.fireEngineRed : border ? border : colors.nightRider }, style]}          onChangeText={handleTextChange}          value={value}          onFocus={handleFocus}          onBlur={handleBlur}          keyboardType={defineKeyBoardType}          maxLength={maxLength}          secureTextEntry={secureTextEntry && !passwordShown}          keyboardAppearance="dark"        /></Animated.View>      {error && (<HelperText type="error" style={styles().errorText}>          {error}</HelperText>      )}</View>  )}

Viewing all articles
Browse latest Browse all 6287

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>