react学习——20react编写github案列

1、List组件

index.js

javascript 复制代码
import React, {Component} from "react";
//引入样式
import "./index.css";
export default class List extends Component {
    render() {
        const {users,isFirst,isLoding,err}=this.props
        return(
            <div className="row">
                {
                    isFirst?<h2>欢迎使用,输入关键字,随后点击搜素</h2>:
                        isLoding?<h2>正在加载中...</h2>:
                            err?<h2 style={{color:'red'}}>{err}</h2>:
                    users.map((userObj)=>{
                        return(
                            <div key={userObj.id}  className="card">
                                <a href={userObj.html_url} target="_blank" rel="noreferrer">
                                    <img alt={"reactjs"} src={userObj.avatar_url} style={{width: '100px'}}/>
                                </a>
                                <p className="card-text">{userObj.login}</p>
                            </div>
                        )
                    })
                }
            </div>
        );
    }
}

index.css

javascript 复制代码
.album {
    min-height: 50rem; /* Can be removed; just added for demo purposes */
    padding-top: 3rem;
    padding-bottom: 3rem;
    background-color: #f7f7f7;
}

.card {
    float: left;
    width: 33.333%;
    padding: .75rem;
    margin-bottom: 2rem;
    border: 1px solid #efefef;
    text-align: center;
}

.card > img {
    margin-bottom: .75rem;
    border-radius: 100px;
}

.card-text {
    font-size: 85%;
}

2、search组件

javascript 复制代码
import React, {Component} from "react";
//引入axios
import axios from 'axios';
export default class Search extends Component {
    search = () =>{
        //获取用户的输入(连续解构赋值+重命名)
        const {keyword:{value:keyword}} = this;
        //发送请求前通知App组件更新状态
        this.props.updateAppState({isFirst:false,isLoding: true});
        //发送网络请求   https://api.github.com/search/users?q=xxxxxx
        axios.get(`https://api.github.com/search/users?q=${keyword}`).then(
            res=>{
                const {items} = res.data;
                this.props.updateAppState({isLoding:false,users:items});
                console.log(items)
            },
            err=>{
                //请求失败通知App组件更新状态
                this.props.updateAppState({isLoding:false,err:err.message});
            }
        )
    }
    render()
    {
        return(
            <section className="jumbotron">
                <h3 className="jumbotron-heading">Search Github Users</h3>
                <div>
                    <input ref={c=>this.keyword=c} type="text" placeholder="enter the name you search"/>&nbsp;
                    <button onClick={this.search}>Search</button>
                </div>
            </section>
        );
    }
}

3、App.js

javascript 复制代码
//创建"外壳"组件APP
import React, {Component} from "react";
//引入Search组件
import Search from "./components/Search";
//引入List组件
import List from "./components/List";
//创建并暴露App组件
export default class App extends Component {
    state={
        users:[],
        isFirst:true,//是否第一次加载数据
        isLoding:false,//是否正在加载数据
        err:''//是否加载失败
    }
    updateAppState=(stateObj)=>{
        this.setState({...stateObj})
    }
    render() {
        return (
            <div className="container">
                <Search updateAppState={this.updateAppState}></Search>
                <List {...this.state}></List>
            </div>
        )
    }
}

5、index,js

javascript 复制代码
//引入React核心库
import React from 'react';
//引入ReactDOM
import ReactDOM from 'react-dom/client';
import App from './App';
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
    // <React.StrictMode>作用:在开发模式下,React 会在渲染组件时检查其代码,以发现一些常见错误。
  <React.StrictMode>
    <App />
  </React.StrictMode>
);
相关推荐
正在走向自律1 小时前
【3/5】人工智能训练师 三级/高级工 考证学习方向:从“独立执行”到“设计、归因与全链条负责”
人工智能·学习·人工智能训练师·注方案设计·数据质控负责人·模型评测与调优辅助·ai训练项目交付
JavaPub-rodert2 小时前
从零搭建通用管理后台:ShiyuAdmin 的 Go、React 与 RBAC 实践
开发语言·react.js·golang
CCIE-Yasuo3 小时前
网络安全-学习数据库-Mysql-2
数据库·学习·mysql
La Pulga3 小时前
【FreeRTOS源码学习笔记】任务切换
单片机·mcu·学习·嵌入式·freertos·实时操作系统
li星野4 小时前
【学习记录】逻辑分析仪完全入门:从品牌方案到采样率、存储深度的核心概念解析
学习
旖旎夜光5 小时前
【C++ 基础入门】类和对象(上):封装、对象模型与 this 指针
开发语言·c++·笔记·学习
GoGeekBaird5 小时前
别再给每个 AI 做自我介绍了:我做了一个「个人上下文」管理系统
后端·github·agent
WEI_YANG_JU5 小时前
初中数学教学中合作学习的研究与实践
学习
码农小韩6 小时前
FPGA学习(一)——LED点灯与开发流程
学习·fpga开发·入门·环境配置·仿真·点灯
莫晓燚6 小时前
Ansible 13 个常用模块---企业实战
git·github