Ответы пользователя по тегу React
  • Как взять данные из fetch-запроса в React-компоненте?

    Elaryks
    @Elaryks
    У вас используется асинхронная функция, которая возвращает промис. Соответственно, результата её выполнения нужно сначала дождаться. Поэтому getCharacters().data === undefined, и уже даже из этого очевидно, что getCharacters().data.results приведёт к ошибке, т.к. это попытка обратиться к свойству у undefined.

    Вашу проблему можно решить, используя хук useEffect с пустым массивом зависимостей, благодаря чему он сработает только при монтировании/размонтировании компонента:

    const [dataCards, setDataCards] = useState([]);
    
    useEffect(() => {
        getCharacters().then((data) => setDataCards(data));
    }, []);


    Здесь мы изначально инициализируем dataCards как пустой массив (что логично, ведь данных пока что нет). При монтировании компонента сработает useEffect, внутри него мы получим данные и уже их сможем использовать в dataCards.

    Кстати, обратите внимание, что вы указали настоящий ключ API.
    Ответ написан
    Комментировать
  • Как лучше переписать условие?

    Elaryks
    @Elaryks
    export const Footer = (props?: IFooterProps) => {
      return (
        <View style={styles.container}>
          {props?.button ? (
            <>
              <RNHoleView style={styles.background} holes={[hole]}>
                <View style={styles.maskBorder}></View>
              </RNHoleView>
              {props.button}
            </>
          ) : (
            <View style={styles.background}></View>
          )}
        </View>
      );
    };
    Ответ написан
    Комментировать
  • React (Класс расширяет значение undefined не является конструктором или null)?

    Elaryks
    @Elaryks
    Уберите круглые скобки после React.Component. Кроме того, не лишним будет настроить ESLint для отлавливания ошибок и Prettier для форматирования кода.
    Ответ написан
    Комментировать
  • Почему не работает pattern на input?

    Elaryks
    @Elaryks
    Проверка с помощью атрибута pattern срабатывает непосредственно перед отправкой формы. Кроме того, это не запретит ввод символов, отличных от цифр, а лишь покажет уведомление в случае несоответствия. Вашу же задачу можно решить несколькими способами.
    Первый вариант: <input type="number" />. Из особенностей: он допускает ввод некоторых символов, отличающихся от цифр (например, "+" и "e").
    Второй вариант: перехватывать событие onChange у поля ввода:
    const [value, setValue] = useState('')
    
    const handleInputChange = (e) => {
      setValue(e.target.value.replace(/\D/g, ''))
    }
    
    <input value={value} onChange={handleInputChange} />
    Ответ написан
    Комментировать