⊗jsrxPmSDSO 36 of 57 menu

Obtendo Seletores no Redux

Às vezes, é muito útil eliminar código desnecessário no aplicativo, bem como encapsular dados.

Vamos abrir nosso aplicativo de produtos. Observe que em vários locais do aplicativo nós, usando seletores, extraímos o slice de produtos para realizar algumas ações com ele.

E agora vamos abrir nosso productsSlice.js, descer até o final do arquivo e adicionar algumas linhas de código, onde escreveremos dois seletores e os exportaremos. Uma função será para obter todos os produtos:

export const selectAllProducts = (state) => state.products.products

E depois dela, a segunda - para obter um produto por id:

export const selectProductById = (state, productId) => state.products.products.find((product) => product.id === productId)

Claro que pode surgir uma pergunta justa: de onde vem essa confusão: state.products.products? A resposta é simples, na lição anterior nós alteramos a estrutura do slice e agora nossos produtos estarão localizados como um array em uma propriedade separada products do slice de produtos state.products (lembre-se de que aqui state é o objeto raiz do estado do Redux, que contém todos os slices).

Assim, simplesmente movemos o código para as funções de seletores para um local no aplicativo e agora precisamos fazer as alterações correspondentes nos locais onde as usamos. Vamos começar pelo arquivo ProductsList.jsx. Vamos importar nele selectAllProducts, pois aqui precisaremos obter todos os produtos:

import { selectAllProducts } from './productsSlice'

E no início do código da função ProductsList, substitua:

const products = useSelector((state) => state.products)

Pela linha:

const products = useSelector(selectAllProducts)

E agora vamos para o arquivo ProductPage.jsx. Aqui precisávamos de um produto por id. Vamos substituir a linha (não se esqueça do import):

const product = useSelector((state) => state.products.find((product) => product.id === productId) )

Por:

const product = useSelector((state) => selectProductById(state, productId))

Faça uma substituição semelhante você mesmo no arquivo EditProductForm.jsx. Aqui nós também precisamos de um produto por id.

Lembre-se de que essa otimização é apenas para sua conveniência e você pode fazê-la quando achar necessário e conveniente. Em nosso exemplo, imagine se escrevêssemos o código da função seletora cada vez em locais diferentes, e depois mudássemos a estrutura do estado, então teríamos que corrigi-la em todos os componentes.

Abra seu aplicativo de estudantes. Abra nele o arquivo studentsSlice.js. No final do arquivo, escreva e exporte, como mostrado na lição, dois seletores para obter todos os estudantes selectAllStudents e para obter um estudante por id selectStudentById.

Agora importe selectAllStudents e selectStudentById nos arquivos StudentsList.jsx, StudentPage.jsx e EditStudentForm.jsx, faça as alterações correspondentes nesses arquivos, como mostrado na lição.

bydeenesfrptru