повторный выбор приставки возвращает функцию - PullRequest
0 голосов
/ 13 марта 2019

По какой-то странной странной причине мой селектор повторного выбора возвращает эту функцию:

ƒ () {
    if (!areArgumentsShallowlyEqual(equalityCheck, lastArgs, arguments)) {
        // apply arguments instead of spreading for performance.
        lastResult = func.apply(null, arguments);
    }

Я не понимаю, почему он это делает. Предполагается вернуть некоторый JSON, который я могу использовать для отображения в моем mapToProps .

Мое отображение редукса достаточно простое и выглядит так:

const mapStateToProps = (state) => {
    return {
        initialValues: selectShop(state),
    }
}

Мой файл селектора выглядит так:

import { createSelector } from 'reselect';

//shops selector
const selectDomain = () => state => (state ? state.shops : {});

export const selectShop = () =>
    createSelector(
        selectDomain(),
        shops => {
            let shop = shops.filter(shop => shop.selected);
            return shop[0];
        },
    );

Почему я получаю функцию, возвращаемую вместо JSON?

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Вы используете createSelector неправильно.Он на самом деле возвращает запомненную версию функции.

Примерно так должно работать

import { createSelector } from 'reselect';

//shops selector
const selectDomain = state => (state ? state.shops : []); // I've fixed it to return an array 

export const selectShop = createSelector(
  selectDomain,
  // you could use find instead of `filter` herr
  shops => shops.find(shop => shop.selected)
)
0 голосов
/ 13 марта 2019

Также добавить к принятому ответу. Селектор вызывается неправильно. Вот как это должно быть правильно названо:

const mapStateToProps = (state) => {
    let selector = selectShop()

    return {
        initialValues: selector (state),
    }
}
...