提取 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)
目前我必须重新配置我的商店以创建选择器。有没有更好的方法呢。
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)