Текстовое поле проверки React js

Я пытаюсь сделать проверку в reactjs. Например, у меня есть поле под названием «имя», и каждый раз, когда вы вводите имя, оно должно быть больше или равно 2. Это работает, когда имя меньше 2, но если оно больше 2, сообщение все равно появляется. Вот мой код:

const [data, setData] = React.useState({
nameValid: true,
prenumeValid: true,
check_textInputChange: false,
name: "",
});

const handleValidUser = (val) => {
if (val.length >= 2) {
  setData({
    ...data,
    nameValid: true,
  });
} else {
  setData({
    ...data,
    nameValid: false,
    });
    }
  };
  const textInputChange = (val) => {
  if (val.length >= 2) {
    setData({
    ...data,
    name: val,
    nameValid: true,
    check_textInputChange: true,
  });
} else {
  setData({
    ...data,
    name: val,
    nameValid: false,
    check_textInputChange: false,
  });
}
 };


 <TextField
      type = "text"
      variant = "outlined"
      label = "Nume"
      required
      fullWidth
      autofocus
      validate
      style = {{ marginBottom: "1em" }}
      onChange = {(val) => textInputChange(val)}
      onBlur = {(e) => handleValidUser(e)}
    />
    {data.nameValid ? null : (
      <text>The name has to be at least 2 letters long</text>
    )}

В следующий раз я предлагаю вам исправить отступ, прежде чем задавать вопрос.

Anh Nhat Tran 13.12.2020 12:52
Поведение ключевого слова "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
1
147
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Можешь попробовать изменить

onChange = {(val) => textInputChange(val)}

к этому:

onChange = {(e) => textInputChange(e.target.value)}

в функции textInputChange вы передаете объект события вместо входного значения вам нужно изменить обработчик onchange с:

onChange = {(val) => textInputChange(val)}

к

onChange = {(val) => textInputChange(val.target.value)}
Ответ принят как подходящий

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

const textInputChange = e => {
    const val = e.target.value;
    
    if (val.length > 2) {
        setData(...)
    } else {
        setData(...)
    }
}

return (
    <TextField
        ...
        onChange = {textInputChange}
        onBlur = {handleValidUser} // as well as onBlur
    />
)

Я создал codeandbox, чтобы продемонстрировать здесь.

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

onChange = {(val) => textInputChange(val)}

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