0

Currently I'm having to reconfigure my store to create selector. Is there a better way to do this.

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

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

2 回答 2

2

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

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

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

有关更多详细信息,请参阅我的帖子Idiomatic Redux: Using Reselect Selectors for Encapsulation and Performance

于 2019-01-07T17:20:52.207 回答
1

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

这样,每当 store 中的值发生变化时,您都会获得提供给组件的更新 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)
于 2019-01-07T17:31:20.033 回答