Как создать функцию обратного вызова для заполнения реквизита значения textinput onChangeText

#javascript #reactjs #react-native #react-redux #react-router

#javascript #reactjs #реагировать-родной #реагировать-redux #реагировать-маршрутизатор

Вопрос:

В этом коде все, чего я пытаюсь достичь, это то, что я получаю введенное значение внутри реквизита значения Textinput . Однако то, что я получаю, равно нулю. A setState является асинхронным, я отстаю на один шаг. Я новичок в react, и я не знаю, как я могу создать функцию обратного вызова, которая может дать мне текущее значение.

Я также хотел бы позже использовать map и создать динамическую форму, я ценю решение, которое может работать и для функции map.

Спасибо

 import React from 'react';
import {
  View,
  TextInput,
} from 'react-native';

class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      Email: null,
      Password: null,
      Address: null,
    };
  }

  EnterValue = (name) => {
    return (text) => {
      this.setState({
        [name]: text,
        
      });
    };
  };

  render() {
    return (
      <View>
        <TextInput
          placeholder="enter email"
          value={this.state.Email}
          onChangeText={this.EnterValue('Email')}
          style={{ borderWidth: 2, borderColor: 'skyblue', margin: 20 }}
        />

        <TextInput
          placeholder="Password"
          value={this.state.Password}
          onChangeText={this.EnterValue('Password')}
          style={{ borderWidth: 2, borderColor: 'skyblue', margin: 20 }}
        />

        <TextInput
          placeholder="Address"
          value={this.state.Address}
          onChangeText={this.EnterValue('Address')}
          style={{ borderWidth: 2, borderColor: 'skyblue', margin: 20 }}
        />
      </View>
    );
  }
}
  

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

1. Вы говорите, что внутри функции, которую вы возвращаете в EnterValue функции, text вычисляется null ?

2. Может быть полезно для вашей ситуации: reactjs.org/docs /…

3. @weltschmerz спасибо, что указали. исправлено. он должен выбрать аргумент name

4. @Dom спасибо. все еще новичок в react и в настоящее время ломаю голову, как реализовать функции в setState в моей ситуации

5. пожалуйста, ответьте на свой вопрос, если вы самостоятельно доберетесь до решения

Ответ №1:

Я бы сделал что-то вроде этого

 onChangeText={(e) => this.EnterValue(e.target.value, 'Email')}
  

(Я не уверен в e.target.value, если оно равно нулю или не определено, передайте e.target и запишите его, чтобы увидеть, какие значения вы можете получить от него)

затем измените свою функцию следующим образом

 EnterValue = (value, inputName) => this.setState({ [inputName]: value});
  

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

1. @Axel , спасибо за усилия. Я пытался. это не сработало. Я предполагаю, что события используются только для реквизитов onChange, а не onChangeText. Но это не дало мне ошибки. Так что я не уверен. Проблема сохраняется 🙂

2. Попробуйте сделать это : onChangeText={(e) => this . EnterValue(e, ‘Email’)}; И консоль. запишите первый параметр в вашей функции EnterValue. Возможно, это не событие, я не очень разбираюсь в react-native. Если это не событие, это может быть само значение, и поэтому ваша проблема будет решена

3. @Axel. Спасибо. пожалуйста, посмотрите мой ответ и спасибо за усилия