Upgrade to Pro — share decks privately, control downloads, hide ads and more …

React'ive Saturday – React + Redux + Selectors

React'ive Saturday – React + Redux + Selectors

Kristina Gusiatina, JS Developer, eKreative

Як багато з нас знають, що ми можемо користуватися селекторами не тільки в css? Розглянемо селектори, а також навіщо вони потрібні у ReactJS.

https://github.com/kina4smile/reselect-app-example

GDG Cherkasy

November 18, 2017
Tweet

More Decks by GDG Cherkasy

Other Decks in Programming

Transcript

  1. •componentWillMount() - срабатывает до того как компонент отрендерился; •componentDidMount() -

    срабатывает после того как компонент отренедерился; •componentWillReceaiveProps() - срабатывает именно тогда когда компонент получает обновленные пропсы; •componentWillUnmount() - срабатывает перед тем как компонент будет уадлен из Дома; •componentDidUpdate - срабатывает тогда когда компонент уже получил новые пропсы;
  2. Posts SelectedPosts Stat e • Posts • SelectedPosts Component s

    Container s PostsContainer SelectedPostsContain er Posts SelectedPost s PostsContain er SelectedPos tsContainer Action s
  3. Stat e • Posts • SelectedPosts Component s Container s

    Posts SelectedPost s PostsContain er SelectedPos tsContainer Action s <input type=“checkbox” /> ComponentWillReceiv e Props() ComponentWillReceiv e Props()
  4. Селекторы – это геттеры для redux стейта. Как геттеры, они

    инкапсулируют структуру стейта и могут пере использоваться. const mapStateToProps = (state, ownProps) => { usersNumber: state.users.length } Это функции которые принимают Redux стейт и аргументы и возвращают данные, которые передаются в компонент
  5. import {getUsersNumber} from ‘./selectors.js’ const mapStateToProps = (state, ownProps) =>

    { usersNumber: getUsersNumber(state.users) } const getUsersNumber = ({ users }) => users.length;
  6. Селекторы также используются для вычисления производных данных const getUsersIds =

    ({users}) => users.map(({ id }) => id); const getUser = ({users, itemId}) => users.find((user) => user.id === itemId);
  7. • Мы можем воспринимать Redux как своеобразную базу данных, селекторы

    удобны чтоб вытянуть из нее какую-либо информацию; •Селекторы могут запоминаться; •Вся логика по выборке из стейта хранится в одном месте; •Селекторы реюзабельны;
  8. export const allPosts = state => state.posts.all export const selectedPostsIds

    = state => state.selectedPosts export const selectedPosts = state => { let selectedPosts = [] state.selectedPosts.forEach(id => { let post = state.posts.all.find(post => post.id === id) if (post) { selectedPosts.push(post) } }) return selectedPosts }
  9. import { createSelector } from 'reselect' export const selectedPosts =

    createSelector( allPosts, selectedPostsIds, (allPosts, selectedPostsIds) => { let selectedPosts = [] selectedPostsIds.forEach(id => { let post = allPosts.find(post => post.id === id) if (post) selectedPosts.push(post) }) return selectedPosts }) export const allPosts = state => state.posts.all export const selectedPostsIds = state => state.selectedPosts
  10. State • Posts • SelectedPosts Components Containers PostsContain er SelectedPos

    tsContainer Action <input type=“checkbox” /> Posts ComponentWillReceiv e Props() SelectedPost s ComponentWillReceiv e Props() Posts ComponentWill ReceiveProps() SelectedPos ts ComponentWill ReceiveProps() Selectors Selectors if selector changed