【React】react学习笔记10-兄弟组件间的传值

摘要:
上一篇博文简述了脚手架的使用,以及在ws中的简单配置,详细的配置方法就不讲了,可能有很多细节,在日常使用中发掘就好。然后是脚手架的项目结构以及之间的联系,这个完全可以自己找出来,再不济就百度一下就好。今天记录一下组件之间的传值问题,特别是兄弟组件的传值,真的是为难了我好久的一个问题:要做啥呢?

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

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

要做啥呢?:

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

【React】react学习笔记10-兄弟组件间的传值第1张

组件结构图:

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

【React】react学习笔记10-兄弟组件间的传值第2张

组件代码:

父组件:

import React,{Component} from 'react';
import Label from './Label';
import Search from './Search';
//组件传值可以使用 Context
export defaultclass 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 defaultclass 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 defaultclass 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>
));
    }
}

免责声明:文章转载自《【React】react学习笔记10-兄弟组件间的传值》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇js把字符串(yyyymmdd)转换成日期格式(yyyy-mm-dd)Python函数独立星号(*)分隔的命名关键字参数下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

React native路由跳转navigate、push、replace的区别

由于没有系统的去学习RN,对路由跳转了解不多,只是跟着项目在做,抽点时间简单学习一下RN路由跳转方法区别,总结如下: 如上图,外部是一个栈容器,此时A页面在最底部,navigate到B页面,为什么此时用navigate没有用push呢,因为在栈内没有B页面时,用navigate和push是一样的,都是进行入栈操作,没有区别,出于习惯使用navigate。...

每日技术:npm模块安装机制

内容来自:https://github.com/Advanced-Frontend/Daily-Interview-Question/issues/22 npm模块安装机制 发出npm install命令 查询node_modules目录之中是否已经存在指定模块 若存在,不再重新安装   若不存在, npm 向register查询模块压缩包的网址 下...

在react项目中使用回车键(Enter)实现tab切换输入框的功能(以及Don't make functions within a loop no-loop-func的问题)

在这碰到的一个问题就是代码在正常的HTML文件中是没有什么问题的,但是当代码放到react项目中就会报警告Don't make functions within a loop no-loop-func(其实大致的意思就是说不要在循环中生成或嵌套函数),可能是严格模式的原因。实现方式只需要需要添加这个效果的输入框加上一个class名‘input‘,这边使用过...

React Native学习-调取摄像头第三方组件:react-native-image-picker

近期做的软件中图片处理是重点,那么自然也就用到了相机照相或者相册选取照片的功能。 react-native中有image-picker这个第三方组件,但是0.18.10这个版本还不是太支持iPad。 这个组件同时支持photo和video,也就是照片和视频都可以用这个组件实现。 安装  npm install --save react-native-ima...

第3章 从Flux到Redux

第3章 从Flux到Redux 3.1 Flux 单向数据流,React是用来替换Jquery的,Flux是以替换Backbone.js、Ember.js等MVC框架为主的。 actionTypes.js定义action类型; actions.js定义action构造函数,决定了这个功能模块可以接受的动作; reducer.js定义这个功能模块如何响应ac...

(转)react 项目构建

原文:https://segmentfault.com/a/1190000016342792 写在前面 每次构建react项目的时候都会配置一大堆东西,时间久了就会忘记怎么配置。为了方便自己记忆也为了其他开发者在构建react应用时能够快速开发,故作此记录。 本项目基于 create-react-app 脚手架进行配置。主要配置了一些项目开发中常用的方法,...