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')
)
posted @ 2017-08-29 10:32  LLLLily  阅读(4776)  评论(0编辑  收藏  举报