React中的多个过滤器

我正在建立一个显示api数据的项目,现在我需要对其进行过滤。

我已经完成了类别过滤器,现在我必须做一个价格范围过滤器,以便这两个过滤器可以一起工作,但是我在努力正确地做到这一点。对于价格范围过滤器,我使用2个输入和一个Submit按钮。

我得到了一系列对象,看起来像这样;

filterData = [

{ name: 'Aang', bender: 'yes', nation: 'Air', person: 'yes', show: 'ATLA', price: 132342 },

{ name: 'Appa', bender: 'yes', nation: 'Air', person: 'no', show: 'ATLA', price: 1322 },

{ name: 'Asami', bender: 'no', nation: 'Republic City', person: 'yes', show: 'LOK', price: 132342 },

{ name: 'Azula', bender: 'yes', nation: 'Fire', person: 'yes', show: 'ATLA', price: 12342 }, etc]

我有状态:

state = {

data: [],

nation: '',

priceStart: '',

priceEnd: ''

}

如果我的弯管机状态已更改,则设置状态的功能另外,对于开始状态和结束状态,也有类似的功能当我为价格设置状态时,我会解析它,所以我有一个状态,顺便说一句,每次输入一些数字时,我都会收到警告然后删除它,说收到’value’属性的NaN

 chFilter = (type, val) => {

switch(type) {

case 'nation':

this.setState({ nation: val });

break;

case 'priceStart':

this.setState({ priceStart: val });

break;

case 'priceEnd':

this.setState({ priceEnd: val });

break;

default:

break;

}

}

getBenders = () => {

const { data, category, priceStart, priceEnd } = this.state;

if( nation || priceStart || priceEnd ){

return data.filter(this.filterBender);

} else {

return data;

}

}

filterBender = data => {

let { nation, priceStart, priceEnd } = this.state;

if(data.nation !== nation) return false;

if(data.price < priceStart) return false;

return true;

}

我认为我需要对所有状态执行一个通用功能,以便它可以监视状态变化并返回过滤后的数据。帮助正确地做到这一点

回答:

您应该编写一个新的过滤器功能,将这些过滤器合并在一起。并像这样使用它:

filterBender = data => {

const {bender, person, nation} = this.state;

if(bender && data.bender !== bender) return false;

if(person && data.person !== person) return false;

if(nation && data.nation !== nation) return false;

...

return true;

}

const visibelBenders = filterData.filter(filterBender);

这样,您将只过滤一次数据,并且每个弯曲器都会针对每个约束条件进行一次评估。最后,只有对所有不同if都返回true的弯曲器将插入到visibelBenders数组中,您可以对其进行渲染。此外,如果其中一个过滤器发生了更改,则可以将其包装到一个记忆函数中以仅执行它。

要显示所有弯曲器,如果未设置过滤器,则可以将过滤器包装到新功能中,以检查是否启用了过滤器。

const getBenders = () => {

const { bender, person, nation} = this.state;

if( person || bender || nation ){

return this.filterData.filter(filterBender);

} else {

return this.filterData;

}

}

const benders = getBenders();

以上是 React中的多个过滤器 的全部内容, 来源链接: utcz.com/qa/424506.html

回到顶部