#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. Это очень стандартное сокращение.