Redux рдХреЗ рд╕рд╛рде рдореЗрд░реЗ рдкрд╣рд▓реЗ рдРрдк рдореЗрдВ, рдореИрдВ рдЕрдкрдиреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ Entities рдХреЛ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред (рдпрд╣ рдореБрдЭреЗ рд╕рд╣реА рд▓рдЧрддрд╛ рд╣реИ)
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рдЖрдИрдбреА рдХреЗ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдРрд░реЗ-рдЬреИрд╕реА рд╡рд╕реНрддреБ рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рдореЗрд░реЗ рдПрд░реЗ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рд╛рдорд╛рдиреНрдп рдХрд┐рдпрд╛
рддрдм рдореИрдВ рдПрдХ рджреГрд╢реНрдп рдореЗрдВ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдПрдХ рдРрд░реЗ рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдЧрд░ рдореИрдВ рдЕрдкрдиреА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрд░реЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ?
рдкреБрдирдГ рдЪрдпрди рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг:
// As "id" for my images i use "uri"
imageEntities = {
uri1: {image...},
uri2: {image...},
....
}
// Selectors:
const imagesSelector = state => state.images;
// parse the Array-like-Object to an Array
const imagesArySelector = createSelector(
[imagesSelector],
images => {
let ary = [];
for (var key in images) {
if (images.hasOwnProperty(key)) {
ary.push(images[key]);
}
}
return ary;
}
);
// filter the Array to get only the new images
export const newImagesSelector = createSelector(
[imagesArySelector],
images => images.filter(image => image.isNew)
);
рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ? (рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рдЕрдм рддрдХ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ)
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░реВрдБ:
import { createSelector } from 'reselect';
const providersSelector = state => state.entities.providers;
const subscribersSelector = state => state.entities.subscribers;
export const providersArraySelector = createSelector(
[providersSelector],
providers => Object.keys(providers).map(id => providers[id])
);
export const subscribersArraySelector = createSelector(
[subscribersSelector],
subscribers => Object.keys(subscribers).map(id => subscribers[id])
);
@itsmepetrov a'lot рдмреЗрд╣рддрд░ рд▓рдЧ рд░рд╣рд╛ рд╣реИ ... thx
рдЗрд╕рд▓рд┐рдП рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдореИрдВ рд╕рд╣реА рд░рд╛рд╕реНрддреЗ рдкрд░ рд╣реВрдВред рдХрд┐рд╕реА рдФрд░ рдХреЛ?
рддрдм рдореИрдВ рдПрдХ рджреГрд╢реНрдп рдореЗрдВ рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдПрдХ рдРрд░реЗ рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред
рдЬрдм рдЖрдк рдРрд░реЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдВ, рддреЛ рдЖрдк рдПрдХ рд╕рд░рдгреА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдкреЗрдЬрд┐рдВрдЧ рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк _need_ рдХрд░реЗрдВрдЧреЗред examples
рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ real-world
рдЙрджрд╛рд╣рд░рдг рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░реВрдБ: