【发布时间】:2021-12-28 20:10:27
【问题描述】:
我有一个父组件,它将所有可供出租的资产传递给一个子组件并渲染它...
在同一个组件中我有一个搜索栏,它应该使搜索更容易,我希望因此的输入,呈现与搜索匹配的特定卡片..
如果在搜索栏中没有插入任何内容,它会呈现所有资产,如果用户键入资产的名称并且它匹配一个或多个资产,它将呈现匹配的资产。
这是我的代码..
class AllAssets extends Component {
state = {
cards: [],
searchField: ''
}
async componentDidMount() {
const { data } = await cardService.getAllCards();
if (data.length > 0) this.setState({ cards: data });
}
addToFavorites = (cardId, userId) => {
saveToFavorites(cardId, userId)
toast.error("The asset was added to your favorites.")
}
render() {
const { cards, searchField } = this.state;
const user = getCurrentUser();
const filteredAssets = cards.filter(card => (
card.assetName.toLowerCase().includes(searchField.toLowerCase())
))
console.log(filteredAssets);
return (
<div className="container">
<SearchBox placeholder={"Enter asset name..."}
handleChange={(e) => this.setState({ searchField: e.target.value })}
/>
<PageHeader>Assets available for rent</PageHeader>
<div className="row">
<div className="col-12 mt-4">
{cards.length > 0 && <p>you can also add specific assets to your favorites and get back to them later...</p>}
</div>
</div>
<div className="row">
{cards.filteredAssets === true ? cards.map(card => <CardPublic addToFavorites={this.addToFavorites} card={filteredAssets} user={user} key={card._id} />) :
cards.map(card => <CardPublic addToFavorites={this.addToFavorites} card={card} user={user} key={card._id} />)
}
</div>
</div >
);
}
}
export default AllAssets;
我尝试使用三元运算符,但不起作用..
{cards.filteredAssets === true ? cards.map(card => <CardPublic addToFavorites={this.addToFavorites} card={filteredAssets} user={user} key={card._id} />)
: cards.map(card => <CardPublic addToFavorites={this.addToFavorites} card={card} user={user} key={card._id} />)
}
在控制台中结果很好..
非常感谢您提前...
【问题讨论】:
标签: javascript reactjs uisearchbar conditional-rendering