Вызов ввода в onPress

#javascript #html #css #react-native

#javascript #HTML #css #реагировать-родной

Вопрос:

Я пытаюсь вызвать свой emailInput и отобразить его на моей странице createPassword, в частности, где youremail@email.com есть. Я привел две страницы ниже: страницу электронной почты, состоящую из пользовательского ввода, и страницу пароля, на которой я хочу, чтобы этот пользовательский ввод отображался. Я не могу по-настоящему разобраться в том, как ссылаться на входные данные в моем onPress. Любое понимание вообще ценится больше, чем вы думаете!

Кроме того, могу ли я вот так позвонить двум onpress’ам? Или мне нужно создать две функции и сделать это таким образом?

SignUpEmail.js

 export default class SignUpEmailPage extends Component {
  
  constructor() {
    super();

    this.state = {
      color1: '#A2A2A2'};}
  
  render() {
    return (
        <View style={styles.containerMain}>
        
        {/* Email Input */}
      <Container style = {styles.emailInput}>
        
        <Form>
          <Item floatingLabel >
            <Label style={{color:this.state.color1}}>Email Address</Label>
                <Input
                style={styles.textInput}
                autoCorrect={false}
                autoCapitalize="none"
                onFocus={() => this.setState({color1: '#F7018D'})}               
                onBlur={() => this.setState({color1: '#A2A2A2'})}
                />
          </Item>
        </Form>
      </Container>


<View style={styles.containerBottom}>   
      <ContinueButton
       
      onPress = {() => navigation.navigate('CreatePassword', { emailInput:  })}
      onPress={() => this.props.navigation.navigate('CreatePassword')}
      /> 
      </View>
 

CreatePassword.js

 export default class CreatePasswordPage extends Component {

  constructor() {
    super();

    this.state = {
      color1: '#A2A2A2'};}
  
  render() {
    return (
        <View style={styles.containerMain}>
       
         {/* Password Input */}
      <Container style = {styles.passwordInput}>
        
        <Form>
          <Item floatingLabel>
           <Label style={{color:this.state.color1}}>Password</Label>
              <Input
                style={styles.textInput}
                autoCorrect={false}
                autoCapitalize="none"
                secureTextEntry={true}
                onFocus={() => this.setState({color1: '#F7018D'})}
                
                onBlur={() => this.setState({color1: '#A2A2A2'})}
         
              />
         </Item>
       </Form>
      </Container>

        <View style={styles.containerHeader}>
        <Text style={styles.title}>Create a Password</Text>
        </View>
        
      <View style={styles.containerCaption}>   
        <Text style={styles.caption}> Lets create your Password for 
 
        </Text> 
      </View>
      <View style={styles.containerCaption2}>   
        <Text style={styles.caption}> youremail@email.com</Text> 
      </View>

      

      <View style= {styles.backArrowPlacement}>
      <BackArrow 
      onPress={() => this.props.navigation.navigate('SignUpEmail')} 
      />
      </View>
      
      <View style={styles.containerBottom}>   
      <ContinueButton
      onPress={() => this.props.navigation.navigate('PhoneVerification')} 
      /> 
      </View>
    </View>

    );
    }
}
 

Ответ №1:

Вы не можете использовать navigation.navigate , поскольку для этого требуется реализация Hooks в функциональном компоненте. Вы можете сделать это

 export default class SignUpEmailPage extends Component {

    constructor() {
        super();

        this.state = {
            color1: '#A2A2A2',
            inputValue: '', // add state here
        };
    }

    updateInputValue = (evt) => {
        this.setState({
            inputValue: evt.target.value
        });
    }

    render() {
        return ( 
            <Input 
             value = {this.state.inputValue}
              onChange={this.updateInputValue }
            />           
            <ContinueButton
               //onPress = {() => navigation.navigate('CreatePassword', { emailInput:  })} // remove this
               onPress={() => this.props.navigation.navigate('CreatePassword',{ emailInput: this.state.inputValue })} // use this like
            />

        )
    }
}
 

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

1. Хорошо, круто, спасибо. Еще одна проблема, с которой я столкнулся, заключается в том, как вызвать ввод, что бы я поставил после emailInput:

2. После emailInput того, как вам нужно добавить значение, подобное emailInput: inputValue тому, которое вы получаете из контейнера ввода

3. Я понимаю, что вам нужно добавить туда входное значение, но что бы это было в моем случае? Я не могу понять это, inputValue выдает мне ошибку, поэтому я предполагаю, что это неверно

4. Я пометил это как правильное! Спасибо вам за ваше время, это очень важно для меня! Если у вас есть время и вы не возражаете объяснить, как работает evt.target.value? Также, если бы вы могли объяснить, как напечатать входное значение, я попробовал <Text}>{this.setState.inputValue}</Text> вместе с некоторыми другими, но это мой лучший выбор.

5. Рад, что это работает для вас 🙂 Вы получаете доступ к значению поля, используя event.target.value синтаксис, и для получения более подробной информации вы можете прочитать здесь w3schools.com/react/react_forms.asp