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

    Elaryks
    @Elaryks
    Можно пробросить RootStore внутрь необходимого стора:

    export class RootStore {
      constructor() {
        this.authStore = new AuthStore(this);
      }
    }
    
    export class AuthStore {
      private rootStore: RootStore;
    
      constructor(rootStore: RootStore) {
        this.rootStore = rootStore;
      }
    
      signIn = (email: string, password: string) => {
        // ...
        this.rootStore.profileStore.getObservables();
        // ...
      };
    }
    Ответ написан
    Комментировать
  • Установка react на vps?

    Elaryks
    @Elaryks
    Вы уверены, что вам на VPS нужна именно dev-версия проекта? Скорее всего, вам нужно задеплоить готовое приложение. Например, вот инструкция: ссылка.

    Если коротко, вам нужно сбилдить проект через npm run build, потом папку dist из корня проекта скопировать куда-нибудь на VPS, настроить nginx (или другой) веб-сервер, чтобы он запросы по нужному вам URL перенаправлял на index.html из той папки.
    Ответ написан
    2 комментария
  • Почему в RTK Query эта ошибка вылазит?

    Elaryks
    @Elaryks
    В документации написано, что импорт для React должен быть таким (обратите внимание, откуда импортируется):

    import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/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} />
    Ответ написан
    Комментировать