zoukankan      html  css  js  c++  java
  • 【React】react学习笔记10-兄弟组件间的传值

      上一篇博文简述了脚手架的使用,以及在ws中的简单配置,详细的配置方法就不讲了,可能有很多细节,在日常使用中发掘就好。然后是脚手架的项目结构以及之间的联系,这个完全可以自己找出来,再不济就百度一下就好。

      今天记录一下组件之间的传值问题,特别是兄弟组件的传值,真的是为难了我好久的一个问题:

    要做啥呢?:

    方便兄弟组件中传值,我知道的实现方式有两种,一种是使用React Context,一种是 如图所示的传球:

    组件结构图:

    输入参数,点击查询,查询的input值传递给兄弟组件查询数据:

    组件代码: 

    父组件:

    import React,{Component} from 'react';
    import Label from './Label';
    import Search from './Search';
    //组件传值可以使用 Context
    export default class ChatCir extends Component{
        constructor(props){
            super(props);
            this.state={
                keyWord: ''
            }
        }
        //设置组件A input的查询参数
        setKeyWorld = (keyWord) => {
            this.setState({
                keyWord
            })
        }
    
        render() {
            return (
                <div>
                    {/*组件A*/}
                    <Search setKeyWorld={this.setKeyWorld} />
                    {/*组件B*/}
                    <Label keyWordValue={this.state.keyWord}/>
                </div>
    
            );
        }
    
    }

    组件A:

    import React,{Component} from 'react';
    
    export default class Search extends Component{
        constructor(props){
            super(props);
            this.state={
                currentKeyValue: ''
            }
        }
        setCurrentKeyValue= (e) => {
            const currentKeyValue = e.target.value
            this.setState({
                currentKeyValue
            })
    
        }
        //点击查询按钮,将值传给父组件
        search = () =>{
            this.props.setKeyWorld(this.state.currentKeyValue);
        }
        render() {
            return (
                <div>
                    <input type="text" value={this.state.currentKeyValue} onChange={this.setCurrentKeyValue}/>
                    <button onClick={this.search}>查询</button>
                </div>
            );
        }
    
    }

    组件B:

    import React,{Component} from 'react';
    import axios from 'axios';
    //项目目录执行
    //npm isntall axios --save
    //npm i -S axios
    
    export default class Label extends Component{
        constructor(props){
            super(props);
            this.state={
                key: '',
                UserList: []
            }
        }
    
    
        //props将要被改变前执行
        componentWillReceiveProps(props){
    
            const key=props.keyWordValue;
            console.log('key',key)
            this.setState({key});
            //ajax请求接口
            axios.get('https://api.github.com/search/users?q='+key)
                .then(response=>{
                    const {items} =  response.data;
                    console.log(items)
                    this.setState({UserList: items})
    
                })
                .catch( error=> {
                    console.log(error);
                })
        }
    
        render() {
            const UserList=this.state.UserList;
            // 遍历列表数据
            return UserList.map((value,index)=> (
                <div style={{ 110, height:160,float:'left'}}>
                    <img style={{ 100, height:100}} src={value.avatar_url} alt=""/>
                    <p>用户Id:{value.login}</p>
                </div>
            ));
        }
    
    }
  • 相关阅读:
    Topo软件
    如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等
    Web学习
    测试Web服务接口
    WebService
    记录几个博客
    Oracle日志性能查看
    设计模式
    hdu 1999 不可摸数
    parfor —— matlab 下的并行循环
  • 原文地址:https://www.cnblogs.com/the-fool/p/11174648.html
Copyright © 2011-2022 走看看