Извлечь Redux Store / State как Селектор - PullRequest
0 голосов
/ 07 января 2019

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

import { configureStore } from "../configureStore";
const { store } = configureStore();

export const getSession = () => store.getState().session.data || false;
export const getToken = () => store.getState().session.data.token || false;

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Если вы собираетесь использовать Redux в мире React, то вам непременно следует прикрепить хранилище редуксов к реквизиту компонента React с помощью connect (https://redux.js.org/basics/usage-with-react).

).

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

При этом вам вообще не нужно store.getState(). Вы делаете что-то вроде:

// selectors.js
const getSession = state => state.session.data || false

// component.js
const MyComponent = ({ session }) => <div>{session}</div>

const mapStateToProps = state => ({
  session: getSession(state),
})

export default connect(mapStateToProps)(MyComponent)
0 голосов
/ 07 января 2019

Селекторные функции должны принимать состояние хранилища в качестве аргумента, а не захватывать ссылку на хранилище. Как пример:

export const getSession = (state) => state.session.data || false;
export const getToken = (state) => state.session.data.token || false;

// use like:
const session = getSession(store.getState());

См. Мой пост Идиоматический Redux: Использование селекторов выбора для инкапсуляции и производительности для получения более подробной информации.

...