mapStateToProps

mapStateToProps (часто говорят просто mapState или маппинг стейтов в пропсы) – это функция, идущая первым аргументом в connect и позволяющая получить со стейта данные, необходимые конкретной конструкторной компоненте (к которой и применяется connect).

Напомним, что connect – HOC (компонента высшего порядка), которая применяется для обмена данными со store. А вторым аргументом в connect является mapDispatchToProps (маппинг dispatch к props), который используется для отправки avtion в store.
Пример объявления mapStateToProps и передачи ее в качестве аргумента в conect:
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
let mapStateToProps = (state) => ({
profile: state.profilePage.profile,
status: state.profilePage.status
});
export default connect(mapStateToProps, {getUserProfile, getStatus, updateStatus})(ProfileContainer)
let mapStateToProps = (state) => ({ profile: state.profilePage.profile, status: state.profilePage.status }); export default connect(mapStateToProps, {getUserProfile, getStatus, updateStatus})(ProfileContainer)
let mapStateToProps = (state) => ({
    profile: state.profilePage.profile,
    status: state.profilePage.status
});

export default connect(mapStateToProps, {getUserProfile, getStatus, updateStatus})(ProfileContainer)

В данном случае мы в конце файла при для компоненты ProfileContainer применили connect, положив в его первый аргумент mapStateToProps, а во второй – 3 экшн криэйтера. Выше в функции mapStateToProps мы извлекаем из стейта нужные нам данные, чтобы передать в качестве пропсов в компоненту ProfileContainer.

Более «глубокие» особенности mapStateToProps

  1. Эта функция может иметь второй редкоиспользуемый и необязательный параметр ownProps, позволяющий передать какие-то данные самой компоненты, которые помогут извлечь нужные данные из хранилища.
    Пример из учебника:

    Plain text
    Copy to clipboard
    Open code in new window
    EnlighterJS 3 Syntax Highlighter
    function mapStateToProps(state, ownProps) {
    const { visibilityFilter } = state
    const { id } = ownProps
    const todo = getTodoById(state, id)
    // component receives additionally:
    return { todo, visibilityFilter }
    }
    // Later, in your application, a parent component renders:
    <ConnectedTodo id={123} />
    function mapStateToProps(state, ownProps) { const { visibilityFilter } = state const { id } = ownProps const todo = getTodoById(state, id) // component receives additionally: return { todo, visibilityFilter } } // Later, in your application, a parent component renders: <ConnectedTodo id={123} />
    function mapStateToProps(state, ownProps) {
      const { visibilityFilter } = state
      const { id } = ownProps
      const todo = getTodoById(state, id)
    
      // component receives additionally:
      return { todo, visibilityFilter }
    }
    
    // Later, in your application, a parent component renders:
    <ConnectedTodo id={123} />
  2. Вызывается mapStateToProps каждый раз при изменении стейта либо второго параметра ownProps. А перерисовывается компонента только тогда, когда какое-либо из полей в mapStateToProps изменилось.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *