Задать вопрос
  • Почему не работают onTransitionRun и onTransitionStart в реакте?

    @bitwheeze Автор вопроса
    Вопрос решился самостоятельной подпиской на события.

    import { useCallback, useEffect, useRef, useState } from "react";
    import "./styles.css";
    
    export default function App() {
      const [counter, setCounter] = useState(0);
      const divRef = useRef(null);
    
      const inc = useCallback(() => setCounter((c) => c + 1), []);
      const dec = useCallback(() => setCounter((c) => c - 1), []);
    
      useEffect(() => {
        divRef.current.addEventListener("transitionrun", inc);
        divRef.current.addEventListener("transitionend", dec);
        () => {
          divRef.current.removeEventListener("transitionend", dec);
          divRef.current.removeEventListener("transitionrun", inc);
        };
      }, []);
    
      return (
        <div className="App">
          <div ref={divRef} className="withtransition">
            {counter}
          </div>
        </div>
      );
    }
    Ответ написан
    Комментировать
  • Почему useReducer не принимает мой reducer?

    @bitwheeze Автор вопроса
    Проблема видимо в WebStorm - typescript. Если в настройках выбрать typescript который вместе с WebStorm идет, то ошибка уходит.

    669253647fe73980880427.png

    Возможно что то в более новой версии компайлера поменялось, в выводе и WS неверно интерпретировал вывод. Не знаю.

    А так оно компилировалось в консоли и запускалось.
    Ответ написан
    Комментировать
  • Как "нарисовать" стопку карт?

    @bitwheeze Автор вопроса
    Нашел в интернете, как сделать.

    {
        top: var(--deck-top);
        left: var(--deck-left);
        background-image: url("/assets/back_02.png"), url("/assets/back_02.png"), url("/assets/back_02.png");
        background-size: var(--card-width) var(--card-height);
        background-repeat: no-repeat, no-repeat, no-repeat;
        width: var(--card-width);
        height: calc(var(--card-height) + 6px);
        border: 1px solid red;
        background-position: left 0px bottom 0px, left 0px bottom 2px, left 0px bottom 4px;
    }


    И вот результат

    6542446c7a301619373484.png
    Ответ написан
    Комментировать
  • Как в Postgres вычесть из даты вычисленное число дней?

    @bitwheeze Автор вопроса
    Нашел как.

    set ts = current_timestamp - cast(tick * 10 / 60 / 60 / 24 as string) * interval '1 day'
    Ответ написан
    Комментировать
  • Почему не передается обновленный state в интервал?

    @bitwheeze
    Я не специалист, возможно вру. У вас "export const App" это функция, которая запускается каждый раз, когда надо перерисовать компоненту. В один из таких вызовов вы создаете таймер и передаете ему стрелочную функцию, которая будет вызываться с заданной периодичностью. После того как App функция создаст таймер с этой вашей функцией, она закончит свою работу и все состояние стэка вместе с переменными уйдет в нирвану. Потом когда таймер вызовет вашу стрелочную функцию, то ей просто уже негде будет брать данные. В лучшем случае она будет все еще иметь доступ к тем значениям, которые были в момент создания таймера.

    Стейт поменяется уже в в другом вызове функции App, та стрелочная функция таймера о ней ничего не знает.

    Я не понял, что вы хотите там изобразить. Возможно вам надо поискать useDebounce хук.
    Ответ написан
    Комментировать
  • Как снять пароль с winrar-архива?

    @bitwheeze
    Вряд ли это вообще возможно. Пароль же не просто "ключик от коробочки в которой лежит секретик", им шифруются все данные в архиве. Иначе бы пароли снимали на раз-два. А значит что бы расшифровать, надо перепаковать весь архив.

    Вот на просторах нашел
    Tools > Convert Archives > Compression > General > Set Password > then click ok and save


    Но в результате все равно архив будет по новой сжат, но уже без пароля.
    Ответ написан
    Комментировать
  • Почему sql запрос в php работает неверно?

    @bitwheeze
    В SQL только одиночные кавычки для строковых значений используются. В двойные только идентификаторы берутся. По этому phone = "+380714293848" работать не будет.
    Ответ написан
  • Как сделать, чтобы одновременно был открыт только один элемент аккордеона?

    @bitwheeze
    Ну если у каждого элемента аккардиона есть свой уникальный id, то в стейте храните id открытого элемента. А в каждом элементе что то вроде такого делайте

    const [openId, setOpenId] = useState();
    return (<>{elems.map(el => <AccElement key={el.id} open={opendId===el.id} onClick={() => setOpenId(el.id)} data={el} />}</>);
    Ответ написан
    Комментировать
  • Как спрятать API в JS от пользователей?

    @bitwheeze
    Тут только SSR поможет или какой то свой proxy api. То-есть нужна будет серверная часть в любом случае.
    Ответ написан
    Комментировать
  • Как правильно организовать показ уведомлений неавторизованному пользователю об успешной оплате?

    @bitwheeze
    Генерировать сложный payid. Который трудно угадать. Какой ни будь sha256 хэш от данных в транзакции плюс соль. Тогда получить данные сможет только тот, кто знает url.
    Ответ написан
    2 комментария
  • Как подружить web flux long polling запрос и scheduled метод?

    @bitwheeze Автор вопроса
    Заработало вроде. Переписал все реактивно. Обработчик перестал блокировать скедулер. Может с двумя Mono.defer перебор, но по другому пока не умею. Еще неясно мне пока с take(4) на своем ли месте этот вызов.

    @GetMapping("/hooks/{account}/new_game")
        public Mono<TableauDto> publisher(@PathVariable String account) {
            log.debug("hooks/new_game {}", account);
            return Mono.defer(() -> {
                log.debug("get current startBlock {}", account);
                final var currentStartBlock = service
                        .load(account)
                        .map(session -> session.getStartBlock())
                        .orElse(0l);
    
                var res = Mono.defer(() -> service.getTableau(account, currentStartBlock))
                        .repeatWhenEmpty(c -> c.delayElements(Duration.ofMillis(3000)).take(4));
    
                log.debug("return res {}", res.single());
    
                return res;
            });
        }
    Ответ написан
    Комментировать
  • Как в Java посредством GraalVM заставить работать nodejs модуль?

    @bitwheeze Автор вопроса
    Поковырялся вчера и пришла идея использовать java класс для генерации рандомных чисел. Для этого написал следующий javascript и загрузил его до проблемной библиотеки.

    var SecureRandom = Java.type('java.security.SecureRandom');
    
    var window = {
    	crypto: {
    		getRandomValues: (buf) => {
    			var bytes = SecureRandom.getSeed(buf.length);
    			buf.set(bytes);
    		}
    	}
    };


    То-есть из JS вызываю метод getSeed класса java.security.SecureRandom. Судя по всему это работает. Теперь могу использовать webpack-ом сгенерерированный js скрипт. Загружается без ошибок, но все еще не совсем рабочий. Но это уже мелочи я думаю.
    Ответ написан
    Комментировать