021.gitHub搜索案例

实现效果:
输入内容点击搜索 调用接口获取数据 渲染在列表内 image.pngcss

index.jsreact

// 引入React核心库
import React from 'react'
// 引入ReactDOM
import ReactDOM from 'react-dom'
// 引入App组件
import App from './App'

// 渲染App到页面
ReactDOM.render(<App/>,document.getElementById('root'))
复制代码

App.jsios

import React,{Component} from 'react'
import SearHeader from './components/searHeader'
import SearList from './components/searList'
import './App.css'
export default class App extends Component{
  // 状态在哪里,操做状态的方法就在哪里

  // 初始化状态
  state={
    list:[
    ],
    isFirst:true,
    isLoading:false,
    isError:false,
    err:''
  }
  
  updateStatus=(data)=>{
    console.log('data',data)
    this.setState(data)
  }

  render(){
    const { todos, list } = this.state
    console.log('apptodos',todos)
    return (
        <div className='searchBox'> <SearHeader updateStatus={this.updateStatus}/> <SearList {...this.state}/> </div>
    )
  }
}

//css
.searchBox,.todoListBox{
    width: 520px;
    padding: 10px 0px 20px 10px;
    border: 2px solid #ddd;
    margin: auto;
    border-radius: 6px;
}
.searchBox{
    margin-top: 50px;
}
复制代码

searchList:axios

import React, { Component } from 'react'
import  Item from '../item/index'
import './index.css'
import PropTypes from 'prop-types'
export default class SearList extends Component {
    // 对接受的props进行类型和必要的限制
    static propTypes = {
    }
    render() {
        console.log(this.props)
        const {list,isFirst,isLoading,isError,err} = this.props
        return (
            <ul className='listUl'> { isFirst?<h2>欢迎使用,请输入关键字点击搜索</h2>: isLoading?<h2>loading……</h2>: isError?<h2>{err}</h2>: Array.isArray(list)?list.map(item => { return( <li className="listLi" {...item} key={item.id}>{item.name}</li> ) }):'' } </ul>
        )
    }
}

//css
.listUl, .listLi{
    list-style: none;
}

.listUl{
    display: flex;
    justify-content: space-around;
}
.listLi{
    width: 100px;
    text-align: center;
}
复制代码

searchHeader:markdown

import React, { Component } from 'react'
import axios from 'axios'
import './index.css'
export default class SearHeader extends Component {
    // 键盘事件的回调
    search=(e)=>{
        console.log('this.element',this.element)
        // 连续解构再重命名 先解构this再解构element 给解构出来的value重命名为inputWord
        const {element:{value:inputWord}} = this
        console.log('inputWord',inputWord)
        this.props.updateStatus({isLoading:true,isFirst:false})
        axios.get(`http://localhost:5000/getUser?name=${inputWord}`).then(
            res=>{
                this.props.updateStatus({isLoading:false,list:res.data})
            },
            err=>{
                console.log(err)
            }
        )

    }
    render() {
        return (
            <div> <input ref={e=>this.element = e} className='todoheader' placeholder='请输入用户名'/> <button className='btn' onClick={this.search}>搜索</button> </div>
        )
    }
}

//css
.todoheader{
    width: 430px;
    height: 30px;
}
.btn{
    width: 60px;
    height: 30px;
    margin-left: 10px;
}
复制代码
相关文章
相关标签/搜索