Aqui, Felipe... você precisa fazer esse ajuste:
function maiorPreco(tag) {
const filtroMaiorPreco = produto.sort((a, b) => parseInt(a.preco) - parseInt(b.preco))
return (
tag.tag === 'Maior preço' ? setCards([...filtroMaiorPreco]) : ''
)
}
O método de array que ordena os elementos, o sort
, retorna uma referência para o mesmo objeto. Então, o React acredita que nada mudou e não faz um novo render.
Então, precisamos criar um novo array, fazendo spread dos elementos já ordenados.
Um outro detalhe é que você não precisa retornar nada nessa função. Como você vai ter uma lógica diferente para cada tipo de filtro, que tal se você fizesse assim:
function ordernarListaPorTag(tag) {
switch (tag.tag) {
case 'Maior preço':
const filtroMaiorPreco = produto.sort((a, b) => parseInt(a.preco) - parseInt(b.preco))
setCards([...filtroMaiorPreco])
break;
case 'Menor preço':
const filtroMenorPreco = produto.sort((a, b) => parseInt(b.preco) - parseInt(a.preco))
setCards([...filtroMenorPreco])
break;
// demais filtros aqui
default:
break;
}
}
Espero que tenha ajudado!