reactjs - 在 react-native 中用 createStructuredSelector 替换 useSelector
问题描述
我在我的 react-native 项目中使用了 reselect 库。我有以下代码。
import { createSelector } from 'reselect';
import { ApplicationState } from 'types/reducer.types';
const selectAuth = ({ auth }: ApplicationState) => auth;
export const selectFirstName = createSelector([selectAuth], auth => auth.user?.firstName);
export const selectLastName = createSelector([selectAuth], auth => auth?.user?.lastName);
在容器中代码是这样的。
import { connect } from 'react-redux';
// import { useSelector } from 'react-redux';
import { createStructuredSelector } from 'reselect';
import { signOut } from 'Redux/auth/auth.actions';
import { selectFirstName, selectLastName } from 'Redux/auth/auth.selectors';
import CustomDrawer from './custom-drawer.component';
const mapStateToProps = createStructuredSelector({
firstName: selectFirstName,
lastName: selectLastName,
});
export default connect(mapStateToProps, { signOut })(CustomDrawer);
现在我想使用 useSelector 钩子。我尝试了几种方法,但没有奏效。如何才能做到这一点?
解决方案
createStructuredSelector
返回一个选择器(一个接受state
并返回一个对象的函数{firstName, lastName}
),所以你可以在里面使用它useSelector
const {firstName, lastName} = useSelector(createStructuredSelector({
firstName: selectFirstName,
lastName: selectLastName,
}));
或使用您现有的变量
const {firstName, lastName} = useSelector(mapStateToProps);
useSelector
但是,当您可以在一个组件中使用多个挂钩时,组合然后破坏属性实际上没有任何意义。
const firstName = useSelector(selectFirstName);
const lastName = useSelector(selectLastName);
推荐阅读
- python - 使用opencv显示当前坐标圆而不是所有点
- sql - SQL - 获取行的 MIN 值并检查此 MIN 值是否在行中至少 2 次
- javascript - 如何解决 SassError:属性“enableProdMode”必须后跟“:”?
- c# - 记录使用单独程序执行的所有功能
- caching - 使用实体框架在 ASP.NET Core MVC 中的 IMemoryCache 中缓存实体本身
- java - 在 Android 中使用 Volley 提取数据
- php - 如何在 PHP 中计算 2 次(不是日期时间)之间的秒差。Laravel // PHP // 碳
- c++ - 从一对点创建两个向量
- java - 为什么这不起作用。两个 for 循环中不能有 if 语句吗?
- java - Java序列化,如何为每个对象识别和命名一个文件?