Как отправить функцию дочернему компоненту?

#javascript #reactjs #react-native

Вопрос:

Я хочу знать, как я могу отправить функцию из родительского компонента в дочерний компонент. Потому что каждый раз, когда я получаю ошибку»Функция проверки» — это не функция». Очень нужна ваша помощь. Также я расширю свой компонент SigIn и добавлю туда другие функции проверки, так что это очень важно для меня

Компонент подписи

 import React, { Component } from 'react'
import { View } from 'react-native'
import { MyButton, MyTextInput, Header } from '../uikit'
import { styles } from '../constants/constants'
import { LOG_IN } from '../routes'
import { isEnoughSymbols } from '../validation/isEnoughSymbols'

export class SignIn extends Component {
    state = {
        symbolsValidation: true
    }

    isEnoughSymbols = (text) => {
        if (text.trim().length < 8)
            this.setState({ symbolsValidation: false })
    }

    render() {
        const { mainContainer, buttons } = styles



        return (
            <View>
                <View style={mainContainer}>
                    <MyTextInput
                        placeholder={'Email/Login'}
                        isSecure={false}
                        errorText={"Incorrect email format!"}
                    />
                    <MyTextInput
                        placeholder={'Password'}
                        isSecure={true}
                        errorText={'Password must contain at least 8 symbols!'}
                        validationFunction={this.isEnoughSymbols.bind(this)}
                    />
                    <MyTextInput
                        placeholder={'Confirm password'}
                        isSecure={true}
                        errorText={"Passwords don't match"}
                    />
                    <View style={buttons}>
                        <MyButton
                            name={'confirm'.toUpperCase()}
                            onPress={() => this.props.navigation.navigate(LOG_IN)} />
                    </View>
                </View>
            </View>
        )
    }
}
 

И компонент MyTextInput

 import React, {Component} from 'react'
import { TextInput, View, StyleSheet } from 'react-native'
import { w, width, h } from '../constants/constants'
import { ErrorMessage } from '.'
//import { isEnoughSymbols } from '../validation/isEnoughSymbols'

const MyTextInput = ({ placeholder, isSecure, errorText, validationFunction }) => {
    let isValid = true
    return (
        <View style={styles.container}>
            <TextInput
                style={styles.text}
                placeholder={placeholder}
                secureTextEntry={isSecure}
                onEndEditing={(e) => validationFunction(e.nativeEvent.text)}
            >
            </TextInput>
            {
                isValid ? null : <ErrorMessage
                    errorText={errorText}
                />
            }

        </View>
    )
}

const styles = StyleSheet.create({
    container: {
        justifyContent: 'flex-start'
    },

    text: {
        borderBottomWidth: 1,
        borderColor: 'black',
        fontSize: 30,
        width: w - w / 10,
        alignSelf: 'center',
        textAlign: 'left',
        marginTop: 20,
        color: 'black'
    },
}
)

export { MyTextInput }
 

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

1. Вы не переходите validationFunction ко всем экземплярам MyTextInput , поэтому вы получаете эту ошибку. вам либо нужно вызвать функцию MyTextInput только в том случае, если она есть, либо вам нужно передать какую-то фиктивную функцию

2. Нулевая регистрация дочернего элемента с дополнительной цепочкой: onEndEditing={(e) => validationFunction?.(e.nativeEvent.text)} .

3. Могу я также спросить вас, как получить реквизиты из моего компонента SigIn?

4. Можете ли вы уточнить, какой реквизит и где?

5. Мне нужно проверить состояние в SignIn.js символов и отправить его по адресу MyInput.js. Если проверка символов неверна, я выдам сообщение об ошибке