React Native Redux: совместное использование реквизитов состояния и селекторов

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

По сути, у меня есть две вещи:

const mapStateToProps = (state) => ({
    storedUserName: state.user.name,
    isUserLoggedIn: state.user.isLoggedIn,
})

const mapStateToProps = createStructuredSelector({
  email: emailSelector,
  userData: userDataSelector
});

Мне нужен способ объединить эти два, чтобы у меня были все 4 реквизита только с одной функцией mapStateToProps. Я просто не знаю, как это сделать. Пожалуйста помоги.


person asanas    schedule 23.10.2020    source источник


Ответы (2)


Попробуйте этот код

import { createSelector } from 'reselect'

const emailSel = state => state.user.email
const userDataSel = state => state.user

const emailSelector = createSelector(
  emailSel,
  email => email // you can make calculations on input and return value
) 

const userDataSelector = createSelector(
  userDataSel,
  userData => userData // you can make calculations on input and return value
) 

const mapStateToProps = (state) => ({
    storedUserName: state.user.name,
    isUserLoggedIn: state.user.isLoggedIn,
    email: emailSelector,
    userData: userDataSelector
})

Селекторы. Селекторы — это функции, которые принимают состояние Redux в качестве аргумента и возвращают некоторые данные.

повторный выбор: вы будете использовать библиотеку повторного выбора при вычислении производных данных/вычислении/применении фильтров к данным, выбранным селектором. Повторный выбор эффективен.

Примечание. Вам не нужен reslsect, когда вам нужно просто получить данные из состояния без каких-либо вычислений и фильтров.

person Mehran Khan    schedule 24.10.2020

Селекторы — это функции, которые принимают состояние Redux в качестве аргумента и возвращают некоторые данные для передачи компоненту, например:

// selector
const getDataType = state => state.editor.dataType;

Вы можете сделать это

import { getDataType } from '../selectors'

const mapStateToProps = (state) => ({
    storedUserName: state.user.name,
    isUserLoggedIn: state.user.isLoggedIn,
    
    dataType: getDataType(state) <-- selector -->
})
person Nooruddin Lakhani    schedule 23.10.2020
comment
Итак, нам не нужен createStructuredSelector? - person asanas; 24.10.2020
comment
Нет, если только вам не нужно просто получать данные из состояния без каких-либо вычислений. - person Nooruddin Lakhani; 24.10.2020