• Каким образом можно ограничить доступ геттерам и экшенам группам пользователей в Vue?

    @nvdfxx
    Senior Pomidor developer
    Может лучше загружать список инвайтов по api, если role==admin, иначе оставлять его null? Зачем загружать его всегда, а потом переживать за безопасность?
    Ответ написан
    2 комментария
  • Как использовать значение параметра компонента в качестве имени геттера vuex?

    0xD34F
    @0xD34F Куратор тега Vue.js
    computed: {
      coordinates() {
        return this.$store.getters[`currency/${this.type}`];
      },
    },

    UPD.

    передаю type: <component :type=" 'string' "></compontent>

    А зачем такие сложности? Достаточно просто type="string".
    Ответ написан
    Комментировать
  • Оценка своего уровня. Как улучшить код?

    rockon404
    @rockon404 Куратор тега React
    Frontend Developer
    1. Используйте const вместо let для определения переменных которые не переопределяются в коде. Это помогает снизить когнитивную нагрузку с человека читающего код и негласный стандарт в React разработке.

    2. Такие вещи как globalStyles и конфигурацию store лучше вынести в отдельные файлы. Они могут со временем хорошо разрастись.
    По поводу globalStyles, вы вообще можете вынести их в отдельный css файл.

    3. Вместо:
    {
      isModal
      ? <Route path="/auth" component={AuthPopup} />
      : null
    }

    лучше:
    {isModal && <Route path="/auth" component={AuthPopup} />}


    4. Вместо:
    function mapDispatchToProps(dispatch) {
        return {
            autoLogin: () => dispatch(autoLogin()),
            getBrowser: () => dispatch(getBrowser()),
            getMedia: () => dispatch(getMedia())
        }
    }


    лучше:
    const mapDispatchToProps = {
      autoLogin,
      getBrowser,
      getMedia,
    };


    5. Точки с запятыми в конце то есть, то нет. Определитесь и приведите код к одному виду.

    6.
    & label {}
    & input {}
    & span {}

    Это не очень хороший подход. Во-первых ваши стили не изолированные, что может приводить к неожиданным результатам. Во-вторых у вас очень много дублирования стилей. Определите Input и Label как базовые компоненты и используйте в разных местах, то же с остальным если есть.

    7. Почему папка со страницами называется Containers? Дань бойлерплейтам?

    8. Использование trailing comma является хорошей практикой.

    9.
    import {combineReducers} from 'redux';
    import photoReducer from './photoReducer';
    import authReducer from './authReducer';
    import globalReducer from './globalReducer';
    
    export default combineReducers({
        photoReducer, authReducer, globalReducer
    })


    Все таки приятней работать с хранилищем в котором ключи не имеют в названии слова reducer:
    import {combineReducers} from 'redux';
    import photo from './photoReducer';
    import auth from './authReducer';
    import global from './globalReducer';
    
    export default combineReducers({
      photo, 
      auth,
      global,
    });


    10. Забудьте вообще, что в языке есть возможность использовать вложенный тернарный оператор:
    return e === 'invalid-email' ? 'Неверно указан e-mail'
        : e === 'user-not-found' ? 'Указанный e-mail на найден'
        : e === 'wrong-password' ? 'Неверный пароль'
        : e === 'email-already-in-use' ? 'Указанный e-mail уже используется'
        : e === 'network-request-failed' ? 'Нет подключения к интернету'
        : e === 'operation-not-allowed' ? 'Произошла ошибка, попробуйте снова'
        : e === 'popup-closed-by-user' ? 'Окно авторизации закрыто пользователем'
        : e === 'account-exists-with-different-credential' ? 'Аккаунт уже существует с другими данными, используйте другой способ авторизации'
        : e

    Это одна из самых худших практик в JavaScript разработке. Тут лучше подойдет конструкция switch case

    11. Константы actionTypes лучше вынести в папку constants и разложить по разным файлам, иначе со временем у вас там будет свалка.

    12. Вместо:
    import {SET_ACTIVE, CHANGE_VALUE, SET_DEFAULT, UPLOAD, UPDATE_IMAGE, SET_IMAGE_ERROR, SET_LIKE, SET_COMMENT, ADD_ARTICLE_SUCCESS, FETCH_ARTICLES_START, FETCH_ARTICLES_SUCCESS, FETCH_ARTICLES_ERROR} from '../actions/actionTypes';

    Лучше:
    import {
      SET_ACTIVE,
      CHANGE_VALUE,
      SET_DEFAULT, UPLOAD,  
      UPDATE_IMAGE,
      SET_IMAGE_ERROR,
      SET_LIKE,
      SET_COMMENT,
      ADD_ARTICLE_SUCCESS,
      FETCH_ARTICLES_START,
      FETCH_ARTICLES_SUCCESS,
      FETCH_ARTICLES_ERROR,
    } from '../actions/actionTypes';


    13. Попробуйте внедрить библиотеку reselect. И для получения значения из store вместо записи вида:
    function mapStateToProps(state) {
        return {
            browser: state.globalReducer.browser
        }
    }


    использовать селектор:
    const mapStateToProps = state => ({
      browser: browserSelector(state),
    });
    Ответ написан
    12 комментариев
  • Как "красиво" в методе компонента заменять надпись на каком-либо элементе?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Каким самым правильным способом можно это сделать?

    "Самых правильных" способов нет.

    Создавать еще один элемент в data()?

    Да.
    Ответ написан
    2 комментария
  • Как из одного массива объектов вычесть другой массив объектов?

    rockon404
    @rockon404
    Frontend Developer
    для примитивов:
    const arr1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
    const arr2 = ['b', 'd', 'f'];
    
    const result = arr1.filter(el => !arr2.includes(el));
    
    // результат ['a', 'c', 'e', 'g']


    для объектов по искомому ключу:
    const arr1 = [{name: 'Carl', age: 32}, {name: 'Sally', age: 24}];
    const arr2 = [{name: 'Carl', age: 32}];
    
    const result = arr1.filter(x => !arr2.some(y => x.name === y.name));
    
    // результат [{name: 'Sally', age: 24}]


    полное сравнение объектов:
    const compareObjects = (obj1, obj2) => {
        for (let p in obj1){
            if (Object.prototype.hasOwnProperty.call(obj1, p)) {
                if(obj1[p] !== obj2[p]){
                    return false;
                }
            }
        }
        for(let p in obj2){
            if (Object.prototype.hasOwnProperty.call(obj2, p)) {
                if (obj1[p] !== obj2[p]) {
                    return false;
                }
            }
        }
        return true;
    };
    
    const arr1 = [{name: 'Carl', age: 32}, {name: 'Sally', age: 24}];
    const arr2 = [{name: 'Carl', age: 32}];
    
    const result = arr1.filter(x => !arr2.some(y => compareObjects(x, y)));
    
    // результат [{name: 'Sally', age: 24}]

    пояснение почему Object.prototype.hasOwnProperty.call(obj, p), а не obj.hasOwnProperty(p).
    Так же можно использовать differesnce из lodash.
    Ответ написан
    6 комментариев
  • Как можно вывести другой контейнер с router-view при определенном значении роута?

    potapchino
    @potapchino
    new Vue({
      router,
      components: {
        App,
        Register,
        Login
      },
      render(h) {
        return h(
          this.$route.path === '/register' ? 'Register' : this.$route.path === '/login' ? 'Login' : 'App'
        )
      }
    }).mount('#app')
    Ответ написан
    Комментировать
  • Можно при создании функции в PHP ограничить тип аргумента встроенными средствами, и как?

    Decadal
    @Decadal
    php 7 - typehints.
    function fname(string $str, \SoapClient $client) {
    //...
    }


    с указанием возвращаемого типа:

    function fname(string $str, \SoapClient $client) : int
    {
    //...
    return 0; 
    }


    php 7.1
    nullable parameters
    /**
     * @param $str string|null
     * @param $client \SoapClien  
     **/
    function fname(?string $str, \SoapClient $client) {
    //...
    }
    Ответ написан
    3 комментария
  • Законодательство какой юрисдикции должен соблюдать сайт, с юзер контентом?

    Jump
    @Jump
    Системный администратор со стажем.
    Законодательство какой юрисдикции должен соблюдать сайт, с юзер контентом?
    Вопрос некорректный.
    Законодательство это свод законов. законодательство не может быть "какой то юрисдикции". Вот законодательство какой-то страны вполне может.
    Юрисдикция - специализация конкретного судебного органа, определяет с какими делами может работать этот самый судебный орган.

    И самое главное - сайт не может соблюдать законодательство, или не соблюдать.
    Вот ваш холодильник, или стиральная машина может соблюдать закон? Точно так же и с сайтом.
    Закон может соблюдать или не соблюдать юридическое или физическое лицо, коим сайт не является.

    Если вопрос в том, законы каких стран должен соблюдать владелец сайта, то ответ будет таким - те, которые сочтет нужным.
    Поясню - во всех странах разные законы, и зачастую они противоречат друг другу.
    Поэтому соблюдать их все попросту невозможно.
    В итоге владелец выбирает законы каких стран ему соблюдать выгоднее - например он будет соблюдать законы страны A потому что он там живет, и за несоблюдение его могут посадить, а так же законы страны Б потому что поьзователи этой страны приносят ему больше всего дохода, и ему неохота этого дохода лишаться.
    А законы страны Г он соблюдать не будет, потому что эта страна никак наказать его не может.
    Вот и все.
    Ответ написан
    6 комментариев
  • Как сделать интерфейс под Windows?

    Adamos
    @Adamos
    Нужно еще учитывать, как часто вам придется переделывать интерфейс вслед за сайтом.
    Поэтому вычеркиваете С++, Шарп, Дельфы и прочие нормальные языки, на которых вы угрепаетесь переписывать браузер самостоятельно, и читаем, что такое Electron.
    Ответ написан
    3 комментария
  • Сколько времени уделять на общение с клиентом? Как поддерживать связь?

    Jump
    @Jump
    Системный администратор со стажем.
    Как вы строите общение с клиентом?
    Как мне удобно. В каждом конкретном случае.

    Есть ли пункт в договоре пункт сколько уделяется времени на клиента?
    Нет конечно, что за чушь.

    Клиент звонит это хорошо, это деньги. Если общение с каким-то конкретным клиентом не приносит денег и напрягает, то я просто прекращаю общение. Например ссылаюсь на занятость. Если человек намеков не понимает, максимально вежливо разжевываю что и как. Если человек адекватный он понимает, и никаких проблем.
    Если человек неадекватный он не понимает, но нафиг мне нужен неадекватный клиент???
    Ответ написан
    Комментировать
  • Как задать ссылке '' 2 onclick?

    Vlad_IT
    @Vlad_IT Куратор тега JavaScript
    Front-end разработчик
    Это JS выражение. Просто разделяйте через ;
    <a class="a1-header" href="#modal"  onclick="$('#formData').val ('Заказ звонка на сайте Ecvols Биофер'); yaCounterXXXXXX.reachGoal('TARGET_NAME'); return true;">
    Ответ написан
    5 комментариев
  • Есть ли русские книги о разработке игр?

    RiseOfDeath
    @RiseOfDeath
    Диванный эксперт.
    Хочу перейти на новый уровень в разработке игр.


    Выучите английский уже наконец! Сразу перейдете на новый уровень (причем это актуально не только для геймдева, и даже не только в IT - это актуально в любой области знаний)

    Поймите уже наконец, что вся актуальная информация публикуется на английском и большая ее часть не переводится на русский (либо переводится со значителньой задержкой во времени)
    Ответ написан
    4 комментария
  • Как происходит доработка верстки на фрилансе?

    Sanes
    @Sanes
    Распространенный сценарий.
    1. Включаете режим экстрасенса
    2. Выпытываете у клиента максимально подробные хотелки
    3. Изучаете чужой код
    4. Выполняете задание
    5. Пытаетесь сдать
    6. Отбиваетесь от мелких хотелок на 15 мин. за 3 копейки от прежних клиентов
    Ответ написан
    5 комментариев
  • Что нужно знать ux/ui дизайнеру на 2018 год? И как он отличается от веб дизайнера?

    Chipr
    @Chipr
    UX/UI designer
    На мой взгляд, UX/UI дизайнер — это современное предоставление о T-образной модели специалиста. Основная специализация сильно зависит от компании или проекта. Базовые вещи, конечно же, типографика, цвет, композиция, css, html, принципы анимации и соответствующие инструменты и сервисы, это минимум для junior позиции. Психофизиология стала очень важна. Различные паттерны поведения, особенности человеческого организма и т.п. Сюда же будет входить работа с метрикам, исследования, статистикой, CJM-ми и пр.
    А дальше уже все будет зависеть от специализации. Кого-то растят в лиды, кого-то в продакты и т.п. В целом, базовые знания необходимы по всем этапам разработки. У нас в компании дизайнер плотно работает с BA, разработчиками и самим клиентом. Поэтому приходится читать больше по этим отраслям.
    Ответ написан
    Комментировать
  • Как реализуется хранение настроек пользователя в базе?

    alex-1917
    @alex-1917
    Если ответ помог, отметь решением
    Да вообще в любой форме храните, хоть в поле text и потом парсить строку)))
    Cуть в том, что настройки юзера - это те данные, к которым НИКОГДА не будет обращения 1000раз в секунду!
    Одно обращение в момент подключения юзера к системе - ВСЁ, далее таблица простаивает. Не будут же все ваши 100 млн юзеров входить в систему одномоментно)))
    Не забивайтесь так, а то уже попахивает преждевременной оптимизацией.

    "Программисты тратят огромное количество времени, размышляя и беспокоясь о некритичных местах кода, и пытаются оптимизировать их, что исключительно негативно сказывается на последующей отладке и поддержке. Мы должны вообще забыть об оптимизации в, скажем, 97% случаев. Поспешная оптимизация является корнем всех зол. И, напротив, мы должны уделить все внимание оставшимся 3%."

    — Дональд Кнут


    Вот держи пример. set_id - это предопределенный набор настроек, который ты даешь редактировать юзерам.
    5bc45f032c184658405712.png
    Ответ написан
    Комментировать
  • Как реализуется хранение настроек пользователя в базе?

    densisss
    @densisss
    Веб-разработчик.
    Вариант с отдельной таблицей хорошо подходит, если много полей настроек. Но почему json? Храните отдельные поля, так будет легче осуществлять фильтрацию и редактирование отдельных полей.
    Ответ написан
    7 комментариев
  • Куда пойти учиться на разработчика в Москве?

    saboteur_kiev
    @saboteur_kiev Куратор тега Python
    software engineer
    В Вузах не учат программированию.

    Поищите вакансии на джуниора. Почитайте требования. Прочитав 10-20 вакансий, усредните и у вас будет понимание что нужно учить, чтобы попробовать устроиться.
    Либо возможно вы сразу пробуйте попасть на интервью.
    Ответ написан
    Комментировать
  • Как сделать круглую границу в 1\6?

    AngReload
    @AngReload
    Кратко о себе
    SVG
    Ответ написан
    Комментировать
  • Как можно шифровать данные в базе данных MySQL?

    Anubis
    @Anubis
    Люблю корейскую кухню и веб-разработку
    Нет, хранить пароли в первозданном виде не стоит. Обычно хранят хэши, а правильность ввода при авторизации производят посредством хэширования введённого значения по тому же алгоритму, что и сохранённый в базе и последующей их сверкой.
    Ответ написан
    2 комментария