Функция обратного вызова onChangeText сохраняет предыдущий ввод

Я новичок в React Native и я пытаюсь создать свое первое приложение для списка дел, используя React Native и JS. я столкнулся с проблемой при проверке этого приложения iam использует textInput, чтобы принять задачу в качестве ввода от пользователя, и iam использует функцию обратного вызова onchangetext

<TextInput style = {styles.input} placeholder = {'Write a task'} value = {task} onChangeText = {text =>{
          console.info(text.length)
          if (text.length==0){
            checkEmpty(true);
            setTask(null);
          }
          else{
            checkEmpty(false);
            setTask(text);
            clearText('');
          }
          }}/>

и кнопка создать задачу

<TouchableOpacity onPress = {()=>{
        handleAddTask();
        }}>
          <View style = {styles.addWrapper}>
            <Text style = {styles.addText}>+</Text>
          </View>
        </TouchableOpacity>

а это функция handleAddTask

  const handleAddTask=()=>{
    Keyboard.dismiss();
    if (isEmpty==false){
      setTaskItems([...taskItems,task])
      setTask('');
    }
    else{
      Alert.alert('OOPS!','Todos must contain at least 1 character',[
        {text:'Okay', onPress: ()=> console.info('Alert closed')}
      ]);
      setTask('');
    }
  }

проблема вот что после первого запуска приложения: если я не ввел никаких данных и нажму на TouchableOpacity, появится всплывающее предупреждение. и после того, как я ввожу любой ввод и добавляю задачу и добавляю ее успешно, когда я снова нажимаю TouchableOpacity, когда ввод пуст, он создает пустую задачу для решения проблемы, я должен ввести любой символ и удалить его и нажать TouchableOpacity, чтобы всплыло предупреждение снова, так как вход пуст ... я хочу знать, как решить эту проблему проверки

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я попытался поиграть с вашим кодом, и я думаю, что состояние isEmpty работает не так, как ожидалось (вы также не предоставили эту часть кода). Вы можете обновить свой checkEmpty после обновления task.

useEffect(() => {
  if (task.length) {
    checkEmpty(false)
  } else {
    checkEmpty(true)
  }
},[task])

Но на самом деле вам не нужно назначать другое состояние, чтобы проверить, пусто ли состояние, вы можете просто использовать task.length для проверки.

  const [task, setTask] = React.useState('');
  const [taskItems, setTaskItems] = React.useState([])
  const handleAddTask=()=>{
    // Keyboard.dismiss();
    if (task){
      setTaskItems(prev => [...prev,task])
      setTask('');
    }
    else{
      Alert.alert('OOPS!','Todos must contain at least 1 character',[
        {text:'Okay', onPress: ()=> console.info('Alert closed')}
      ]);
      // setTask('');
    }
  }
  return (
    <View style = {styles.container}>
      <TextInput
        placeholder = {'Write a task'}
        value = {task}
        onChangeText = {(text) => setTask(text)}
      />
      <TouchableOpacity
        onPress = {() => {
          handleAddTask();
        }}>
        <View style = {{margin : 5}}>
          <Text style = {{fontSize: 24}}>+</Text>
        </View>
      </TouchableOpacity>
      {taskItems.length ? taskItems.map(t=> <Text style = {styles.paragraph}>{t}</Text>) : undefined}
    </View>
  );

Проверить - закуска.выставка

Другие вопросы по теме