Понимание повторного выбора в редуксе

Я просматривал статью Дэна Паркера на Medium о повторном выборе нпм модуль.

В разделе предварительного этапа своего кода он привел этот пример (с комментариями)

import { createSelector } from 'reselect'
// I am a generic selector, I need no special treatment
// I am now passing props so I can find a specific bar
const getBar = (state, props) => {
  const id = props.id
  const barById = state.foo.bar.find((item,i) => item.id === id)
  return barById
}
// This no longer will work if it is needed in multiple places
//export const getBarState = createSelector(
//  [ getBar ],
//  (bar) => bar
//)
// This is proper if it is needed in multiple instances
export const makeGetBarState = () => createSelector(
  [ getBar ],
  (bar) => bar
)

Я не могу понять приведенный выше код, как здесь

import { createSelector } from 'reselect'

Мы импортируем createSelector из reselect.

const getBar = (state, props) => {
  const id = props.id
  const barById = state.foo.bar.find((item,i) => item.id === id)
  return barById
}

здесь я не могу понять, откуда/как мы получаем props.

и почему это не сработает

export const getBarState = createSelector(
  [ getBar ],
  (bar) => bar
)

но это было бы

export const makeGetBarState = () => createSelector(
  [ getBar ],
  (bar) => bar
)

person anny123    schedule 13.06.2019    source источник


Ответы (1)


здесь я не могу понять, откуда/как мы получаем реквизит.

props можно передать в getBar из mapStateToProps:

const mapStateToProps = (state, props) => {
  return {
    todos: getBar(state, props)
  }
}

и почему это не сработает

не возвращает новую копию getBar

export const getBarState = createSelector(
  [ getBar ],
  (bar) => bar
)

но это было бы

возвращает новую копию getBar

export const makeGetBarState = () => createSelector(
  [ getBar ],
  (bar) => bar
)

Вы хотели бы вернуть новую копию, когда вам нужно разделить селектор между несколькими экземплярами, передавая реквизиты и сохраняя запоминание, где каждому экземпляру компонента нужна собственная частная копия селектора.

person Tomer    schedule 13.06.2019