Понимание повторного выбора в редуксе - PullRequest
1 голос
/ 13 июня 2019

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

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

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 из повторного выбора.

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
)

1 Ответ

0 голосов
/ 13 июня 2019

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

реквизиты могут быть переданы в 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
)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...