提取 Redux Store/State 作为选择器

Extract Redux Store/State as Selector

目前我必须重新配置我的商店以创建选择器。有没有更好的方法呢。

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

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

选择器函数应该将存储状态作为参数,而不是捕获存储引用。例如:

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

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

查看我的 post Idiomatic Redux: Using Reselect Selectors for Encapsulation and Performance 了解更多详情。

如果你打算在 React 世界中使用 Redux,那么你绝对应该使用 connect (https://redux.js.org/basics/usage-with-react).[=14= 将 redux store 附加到 React 组件的 props ]

这样,每当商店中的值发生变化时,您都会获得提供给组件的更新道具,并使用正确的值重新渲染组件。

这样一来,您通常就不需要 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)