我正在为我的应用程序执行搜索栏功能,当搜索没有结果时,我需要显示Your search criteria is invalid
或与之相关的内容。
我有这个来显示结果
{!!this.state.value.length &&
<div>
{match}
</div>
}
我想尝试做像
这样的事情 {(!this.state.result.length && !!this.state.value.length) &&
<Paper>Your search criteria is invalid</Paper>
}
但是在第二种情况下,当有结果时仍会显示该消息。
我这样做是因为如果我做if else
,我会收到错误
在这种情况下,this.state.value
是您在搜索栏中输入的内容,this.state.result
是搜索结果
那么,最好的技术是什么?
这是代码的完整部分
更新
class UniversalSearch extends Component {
constructor() {
super();
this.state = {value : '', result: ''};
}
render () {
let searchVal = this._matchPeople(this.state.value),
match = Object.keys(searchVal).map(function(key) {
return <div className="threeColumn"><Paper><div className="maxHeight"><h3>{key}</h3><p>{searchVal[key]}</p></div></Paper></div>;
}),
searchResult = this.state.result ? match : (<Paper>Your search criteria is invalid</Paper>);
return (
<Grid>
<Row>
<Column>
<TextField onChange={this._onChange.bind(this)}
fullWidth={true} floatingLabelText="Universal Search"
onKeyUp={this._changeInput.bind(this)} value={this.state.value} />
{searchResult}
</Column>
</Row>
</Grid>
);
}
_matchPeople = (input) => {
let reg = new RegExp(input.split('').join('\\w*').replace(/\W/, ""), 'i');
let filteredObj = { };
Object.keys(falsyData).forEach(function(key) {
if(key.match(reg)){
filteredObj[key] = falsyData[key];
}
});
return filteredObj;
}
_changeInput = (val) => {
let autoCompleteResult = this._matchPeople(this.state.value);
if (autoCompleteResult.length) {
this.setState({result: autoCompleteResult.join(' ')});
};
}
_onChange = (event) => {
this.setState({value: event.target.value});
}
}
答案 0 :(得分:0)
这样的事情:
render() {
let searchResult = this.state.result ? match : (<Paper>Your search criteria is invalid</Paper>)
return (
<Column>
<TextField onChange={this._onChange.bind(this)}
onKeyUp={this._changeInput.bind(this)} value={this.state.value} />
{ searchResult }
</Column>
);
}
修改:
Here is a working JSFiddle我建议的解决方案
尝试更改状态,看看{ searchResult }