предотвращение запуска селекторов дочерних компонентов в redux

#reactjs #react-redux

#reactjs #реагировать-redux

Вопрос:

Как я могу предотвратить обновление моих дочерних селекторов каждый раз, когда родительский компонент передает данные?

поведение селекторов имеет смысл, я просто ищу альтернативные подходы, более похожие на более простой подход, чем использование reselect (не допускается использование за пределами redux).

суть

Ответ №1:

Селекторы повторного выбора запоминаются, что означает, что если параметры селектора совпадают, результирующие реквизиты являются одним и тем же объектом. Даже если вы можете использовать reselect, вы можете легко запомнить свои селекторы, внедрив метод запоминания, подобный тому, который приведен в статье Адди Османи:

 function memoize( fn ) {
    return function () {
        var args = Array.prototype.slice.call(arguments),
            hash = "",
            i = args.length;
        currentArg = null;
        while (i--) {
            currentArg = args[i];
            hash  = (currentArg === Object(currentArg)) ?
            JSON.stringify(currentArg) : currentArg;
            fn.memoize || (fn.memoize = {});
        }
        return (hash in fn.memoize) ? fn.memoize[hash] :
        fn.memoize[hash] = fn.apply(this, args);
    };
}
  

А затем используйте его для создания селекторов:

 const selector = memoize((state) =>({
   alerts: selectors.alerts(state) 
}));
  

Комментарии:

1. мой подход был совершенно произвольным, имеет ли это смысл? приемлемо ли это?

2. Это очень стандартное сокращение.