【发布时间】:2019-08-06 06:20:05
【问题描述】:
我正在尝试使用 tsx 在 reactjs 中过滤具有多个键值的数据。 Cards.tsx 是父组件,ShipmentCard.tsx 是子组件。我收到Property 'toLowerCase' does not exist on type 'never' 错误。我只想根据搜索条件返回相关对象。谁能让我知道我在哪里犯了错误?
Cards.tsx
class Cards extends Component {
state = {
card: [],
filter: ""
};
componentDidMount() {
this.loadShipmentList();
}
handleChange = (event: any) => {
this.setState({ filter: event.target.value });
};
loadShipmentList() {
fetch("http://localhost:3001/shipments")
.then(response => response.json())
.then(data => this.setState({ card: data }));
}
render() {
const { card, filter } = this.state;
const lowercasedFilter = filter.toLowerCase();
const filteredData = this.state.card.filter(item => {
return Object.keys(item).some(key =>
item[key].toLowerCase().includes(lowercasedFilter)
);
});
return (
<Card className="Search-Bar">
<CardContent>
<Grid container spacing={3}>
<TextField
label="Search"
onChange={this.handleChange}
/>
</Grid>
</CardContent>
</Card>
<Grid container spacing={3}>
{filteredData.map((card: any) => (
<Grid item xs={12}>
<ShipmentCard key={card.id} value={card} />
</Grid>
))}
</Grid>
);
}
}
export default Cards;
{
"shipments": [
{
"id": "123",
"name": "Heromisha",
"total": "1000",
"status": "ACTIVE",
"userId": "E222"
},
{
"id": "456",
"name": "Honda",
"total": "3000",
"status": "ACTIVE",
"userId": "E111"
}
]
}
【问题讨论】:
-
什么时候出现这个错误,启动时?另外,我建议不要对变量使用“过滤器”这个词。
-
注意到了。开始打字的时候。
TypeError: item[key].toLowerCase is not a function -
@rrd - 没有理由不能使用
filter作为变量名。 -
@T.J.Crowder,感谢您回来。我还在琢磨。
item[key].toLowerCase()对象值和filter.toLowerCase()是输入值。这是我得到TypeError: item[key].toLowerCase is not a function的错误 -
@SKL - 如果您执行我在答案末尾添加的操作,您将不会收到该错误。
标签: javascript reactjs typescript types react-tsx