【发布时间】:2020-05-27 08:09:56
【问题描述】:
有人可以帮助编写过滤我的搜索结果的函数吗? Sandobox中有代码:https://codesandbox.io/s/romantic-snowflake-irbhf?fontsize=14&hidenavigation=1&theme=dark
class Search extends React.Component {
state = {
searchValue: "",
songs: [],
musicTabs: ["Random", "Bass", "Player", "Chords", "Guitar"],
result: ""
};
handleOnChange = event => {
this.setState({ searchValue: event.target.value });
};
handleSelectChange = event => {
this.setState(
{
result: event.target.value
},
() => console.log(this.state.result)
);
};
handleSearch = () => {
this.makeApiCall(this.state.searchValue);
};
makeApiCall = async searchInput => {
let api_url = `https://www.songsterr.com/a/ra/songs/.json?pattern=${searchInput}`;
const response = await fetch(api_url);
const songs = await response.json();
this.setState({ songs });
};
render() {
return (
<div>
<input
name="text"
type="search"
placeholder="Wyszukaj..."
onChange={event => this.handleOnChange(event)}
value={this.state.SearchValue}
/>
<Select
optionValue={this.state.musicTabs}
change={this.handleSelectChange}
value={this.state.result}
/>
<br />
<button onClick={this.handleSearch}>Search</button>
{this.state.songs ? (
<div>
{this.state.songs.map((song, index) => (
<div key={index} className="lists">
<h1>
Artist: <span>{song.artist.name}</span>
</h1>
<h2>
Song title: <span>{song.title}</span>
</h2>
<ol>
<b>Available tabs:</b>
{song.tabTypes.map((tab, index) => (
<li key={index}> {song.tabTypes[index]} </li>
))}
</ol>
</div>
))}
</div>
) : (
<p>Something</p>
)}
</div>
);
}
}
const Select = props => {
const { optionValue, change } = props;
const valueMusicTabs = optionValue.map((musicTab, index) => {
return (
<option name={optionValue[index]} key={index}>
{" "}
{optionValue[index]}{" "}
</option>
);
});
return (
<>
<select onChange={change}>{valueMusicTabs}</select>
</>
);
};
我想按输入值和选定值进行搜索。例如,如果我输入任何标题或歌曲名称并选择低音,我想用歌曲/艺术家呈现结果,其中包括可用选项卡中的“低音”。如果将选择“随机”,那么它应该呈现所有结果。请帮帮我,我不知道该怎么做......
【问题讨论】:
-
你想要像下面的Sandbox一样吗?这有点复杂,因为您的选项卡标识符与选择框中的字符串不匹配。如果代码对您有用,我可以添加一些解释以及如何改进代码的答案。
-
是的,太棒了,非常感谢!
标签: javascript reactjs api methods filter