• Почему возникает Actions must be plain objects без ReduxThunk?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    Потому что redux-thunk это middleware и если бы вы заглянули в его исходники(всего 14 строк), то вы бы увидели, что он перехватывает и вызывает функции, передавая в них нужные аргументы и возвращает результат, не предавая его дальше. Без него их перехватывать нечему и они попадают туда куда не должны попадать и провоцируют ошибку, так как Redux без мiddleware на вход в dispatch принимает только объекты, о чем и говорится в тексте ошибки, которую вы получаете.

    Возвращаемое значение(return) в асинхронных действиях используется только вами, его возвращает вызов dispatch. В редьюсеры, как было озвучено выше, оно не попадает.
    Так как возвращается Promise, его можно использовать как-то так:
    Ваш Async action:
    export const asyncAction = (...someArgs) => async dispatch => {
      const res = await someAsyncCall(...someArgs);
      dispatch({ type: SOME_ACTION_TYPE, payload: res });
    
      return res;
    };

    Использование в коде(явный пример с dispatch):
    componentDidMount() {
      const { dispatch } = this.props;
    
      dispatch(asyncAction(...optionalArgs)).then(result => doSomething(result));
    }

    То же самое с проброской async action через connect:
    componentDidMount() {
      const { asyncAction } = this.props;
    
      asyncAction(...optionalArgs).then(result => doSomething(result));
    }


    Вообще, для использования then значение из асинхронной функции возвращать совсем не обязательно и такой код тоже будет прекрасно работать:
    export const asyncAction = (...someArgs) => async dispatch => {
      const res = await someAsyncCall(...someArgs);
      dispatch({ type: SOME_ACTION_TYPE, payload: res });
    };

    Использование в коде(явный пример с dispatch):
    componentDidMount() {
      const { dispatch } = this.props;
    
      dispatch(asyncAction(...optionalArgs)).then(() => doSomething());
    }
    Ответ написан
    8 комментариев
  • Почему скачет dock-панель между внешним экраном и экраном ноутбука?

    @Mari20083
    Долгими мучениями я нашла ответ!
    Панель перемещается, если опустить курсор до упора вниз по центру экрана и потом еще раз попытаться смахнуть его вниз. После этого оттуда выныривает панель Docs. Только работает иногда с первого раза, иногда нет.
    Т.е. ведем курсор вниз, пока он не упрется в границу экрана, отпускаем, а потом, не поднимая, пытаемся завести его за нижнюю границу еще раз. Повторюсь, что с первого раза может не получиться. Может еще какая-то деталь есть.
    Ответ написан
    1 комментарий
  • Как удалить все dom элементы внутри элемента и их неограниченное количество их детей.?

    @kapitan7830
    domElem.innerHTML = '';
    Ответ написан
    Комментировать
  • Что такое Vue Native?

    andykov
    @andykov
    Shit happens
    Vue Native это обертка над React Native.
    NativeScript это отдельный кроссплатформенный фреймворк который дает доступ к нативным компонентам платформы. И оба эти инструмента это не WebView.
    NS использует движок V8 JavaScript для Android и JavaScriptCore для iOS. RN использует только JavaScriptCore
    для обеих платформ. NS может в JS, TS, Angular и в этом году добавили официальную поддержку Vue за счет интеграции с плагином nativescript-vue
    Можно в playground'e пощупать.

    С RN я не работал, как и с VN, но мне интересно развитие NS.
    В общих чертах RN и NS похожи, но отличаются архитектурой взаимодействия с родными модулями платформ.
    NS работает c API интерфейсом платформы непосредственно в движке JS, отправляя вызовы и конвертируя данные на лету. При компиляции все XML компоненты передаются на собственные компоненты Android и iOS перед упаковкой в ​​двоичный файл платформы. В оф.документации все расписано
    Есть хорошая статья в блоге NS, где они разбирают серию статей от Airbnb об опыте с RN.

    Считаю что NativeScript недооценен сообществом, годный продукт.

    Простые приложения можно строить и на NS, что то более сложное где память решает, лучше писать нативно.
    Ответ написан
    1 комментарий
  • Проверка формы на jQuery. Как обратиться к input[name="phone"]?

    Zoxon
    @Zoxon
    Веб-разработчик
    var $phone = $('input[name="phone"]').val();
    
    // на чистом js 
    let phone = document.querySelector('input[name="phone"]').value;
    Ответ написан
    Комментировать