JavaScript 语言 如何使用Redux Toolkit createEntityAdapter选择器

JavaScript阿木 发布于 19 天前 5 次阅读


使用Redux Toolkit createEntityAdapter选择器的JavaScript实践

Redux Toolkit 是一个用于创建现代Redux应用程序的库,它简化了Redux的设置和配置。其中一个非常有用的功能是 `createEntityAdapter`,它可以帮助我们轻松地创建和管理实体(如用户、产品等)的集合。本文将深入探讨如何使用 `createEntityAdapter` 创建选择器,以及这些选择器在JavaScript中的应用。

在Redux中,选择器(selectors)是用于从Redux状态树中提取数据的函数。它们是连接UI组件和Redux状态树的关键。`createEntityAdapter` 提供了一系列内置的选择器,这些选择器可以帮助我们更高效地访问和管理实体数据。

什么是createEntityAdapter?

`createEntityAdapter` 是一个函数,它接受几个参数来创建一个适配器对象。这个适配器对象包含了用于管理实体集合的方法,如添加、删除、更新等。它还提供了一些默认的选择器,这些选择器可以帮助我们从状态树中获取实体的数据。

创建适配器

我们需要使用 `createEntityAdapter` 创建一个适配器。以下是一个简单的例子,展示了如何为用户实体创建一个适配器:

javascript

import { createEntityAdapter } from '@reduxjs/toolkit';

const userAdapter = createEntityAdapter({


selectId: (user) => user.id, // 选择实体的ID


});

export const { selectAll, selectById, selectIds } = userAdapter.getSelectors((state) => state.users);


在这个例子中,我们为用户实体创建了一个适配器,并指定了 `selectId` 函数来选择实体的ID。`selectAll`、`selectById` 和 `selectIds` 是从适配器中获取的选择器。

使用选择器

现在我们已经有了适配器,我们可以使用它提供的选择器来从Redux状态树中获取数据。

selectAll

`selectAll` 选择器返回当前状态中所有实体的数组。以下是如何在组件中使用它的例子:

javascript

import React from 'react';


import { useSelector } from 'react-redux';


import { selectAll } from './userAdapter';

const UsersList = () => {


const users = useSelector(selectAll);

return (


<ul>


{users.map((user) => (


<li key={user.id}>{user.name}</li>


))}


</ul>


);


};


selectById

`selectById` 选择器返回具有指定ID的实体。以下是如何在组件中使用它的例子:

javascript

import React from 'react';


import { useSelector } from 'react-redux';


import { selectById } from './userAdapter';

const UserDetail = ({ userId }) => {


const user = useSelector((state) => selectById(state, userId));

return (


<div>


<h1>{user.name}</h1>


<p>{user.email}</p>


</div>


);


};


selectIds

`selectIds` 选择器返回当前状态中所有实体的ID数组。以下是如何在组件中使用它的例子:

javascript

import React from 'react';


import { useSelector } from 'react-redux';


import { selectIds } from './userAdapter';

const UsersCount = () => {


const userIds = useSelector(selectIds);

return (


<p>There are {userIds.length} users.</p>


);


};


高级选择器

除了基本的 `selectAll`、`selectById` 和 `selectIds` 选择器之外,`createEntityAdapter` 还提供了一些高级选择器,如 `selectEntities` 和 `selectTotal`。

selectEntities

`selectEntities` 选择器返回一个对象,其中包含所有实体的数据,键是实体的ID。以下是如何在组件中使用它的例子:

javascript

import React from 'react';


import { useSelector } from 'react-redux';


import { selectEntities } from './userAdapter';

const UsersMap = () => {


const users = useSelector(selectEntities);

return (


<div>


{Object.keys(users).map((userId) => (


<div key={userId}>


<h1>{users[userId].name}</h1>


<p>{users[userId].email}</p>


</div>


))}


</div>


);


};


selectTotal

`selectTotal` 选择器返回当前状态中实体的总数。以下是如何在组件中使用它的例子:

javascript

import React from 'react';


import { useSelector } from 'react-redux';


import { selectTotal } from './userAdapter';

const UsersTotal = () => {


const total = useSelector(selectTotal);

return (


<p>There are {total} users in total.</p>


);


};


总结

`createEntityAdapter` 是一个强大的工具,可以帮助我们简化Redux应用程序中实体集合的管理。通过使用它提供的选择器,我们可以轻松地从Redux状态树中获取所需的数据,并将其用于我们的组件中。本文通过一系列的例子展示了如何使用 `createEntityAdapter` 和它的选择器,希望这些信息能够帮助你在自己的项目中更好地利用这个工具。