react实现极简搜索框效果
hover.css内容
* { margin: 0; padding: 0; } li.hover { background: #ccc; color: darkgreen; }
js内容
import React,{Component} from 'react';
import ReactDom from 'react-dom';
import fetchJsonp from 'fetch-jsonp';
import './css/hover.css';
class Baidu extends Component{
constructor(){
super();
this.state={
ipt: '',
arr: []
}
this.iptChange = this.iptChange.bind(this);
this.fnOver = this.fnOver.bind(this);
this.fnOut = this.fnOut.bind(this);
}
iptChange(ev){
this.setState({
ipt: ev.target.value
})
let URL = 'https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=';
// 切记,是URL+ev.target.value而非this.state.ipt↓因为setState({})是一个异步过程。
//或者将请求放在this.setState的回调函数里。即:this.setState(,()=>{...在这里请求数据就可以直接使用this.state.ipt了...});
fetchJsonp(URL+ev.target.value,{jsonpCallback:'cb'}).then((streamObj)=>{
streamObj.json().then((data)=>{
// console.log(data)
this.setState({
arr: data.s
})
})
})
}
fnOver(ev){
ev.target.className='hover'
}
fnOut(ev){
ev.target.className=''
}
render(){
return (
<div>
<input type="text" value={this.state.ipt1} onChange={this.iptChange} />百度
<ul>
{
this.state.arr.map((val,index)=>{
return (
<li key={index} onMouseOver={this.fnOver} onMouseOut={this.fnOut}>{val}</li>
)
})
}
</ul>
</div>
)
}
}
ReactDom.render(
<Baidu></Baidu>,
document.querySelector('#app')
)
怕什么真理无穷,进一寸有一寸的欢喜。

浙公网安备 33010602011771号