React 组件基本使用(3) ---父子组件之间的通信

  当有多个组件需要共享状态的时候,这就需要把状态放到这些组件共有的父组件中,相应地,这些组件就变成了子组件,从而涉及到父子组件之间的通信。父组件通过props 给子组件传递数据,子组件则是通过调用父组件传给它的函数给父组件传递数据。

  很简单的一个例子,我们在输入框中输入温度,输入框下面显示冷和热。这里就有两个组件,输入框和它下面的显示内容,且它们共享一个状态,就是温度。所以我们要把温度这个状态放到这两个组件的父组件中。这里就有三个组件,一个输入框TemperatureInput,  一个是显示内容TemperatureShow,  父组件TemperatureContainer. 由于 TemperatuerInput  和TemperatureShow 是无状态的,可以用函数式声明,接受父组件传来的props. TempeartureContainer 是有状态的,要用class 声明。

  TemperatureShow 组件非常简单,就是条件渲染。根据父组件传递过来的温度,渲染出不同的内容。

    // temperatureShow
      function TemperatureShow(props) {
        if(props.temperature >38) {
          return <p>天气热</p>
        }else if(props.temperature<=38 && props.temperature >=0){
          return <p>天气正合适</p>
        }else {
          return <p>天气冷</p>
        }
      }

  TemperatureInput 则包含一个input输入框,在react, 输入框主要通过 value和 onChange 事件进行控制,状态是自保持的。但是这里我们把状态放到父组件TempeartureContainer 中,输入框是无状态的,所以它的value值也只能从父组件中获取,onChange 事件也只把用户输入的值传递给父组件,这里就是父子之间相互通信。 这里先简单写一个它的表现,onChange 稍后再说。

 //temperatureInput
      function TemperatureInput(props) {
        return (
          <p>
            <label htmlFor="tempInput">请输入天气温度</label>
            <input type="text" name="tempInput" value={props.temperature} onChange={} />
          </p>
        )
      }

  还剩下TempeartureContainer 父组件,它是一个容器,把所有的组件包起来,当然,它还要定义状态temperature,传递给子组件。

class TemperatureContainer extends React.Component {
        constructor(props) {
          super(props);
          this.state = {
            temperature: ‘‘
          };
        }

        render() {
          let temperature = this.state.temperature
          return (
            <div>
                <TemperatureInput temperature={temperature} />
                <TemperatureShow  temperature={parseFloat(temperature) } />
            </div>
          )
      }
    }

  现在通过ReactDOM.render 把TempeartureContainer 渲染到页面上。

ReactDOM.render(
        <TemperatureContainer />,
        document.getElementById(‘root‘)
);

  最后我们要处理一下input 输入框中的输入问题,当我们进行输入的时候,会触发onChange事件,这时要改变temperature 的值,但是input自身是无法做到的,因为temperature存在于 父组件中,只能在父组件中改变。父组件中可以声明一个函数,调用setState 函数来进行改变,在setState中我们要把新值赋值给temperature, 但是这个新值,也就是用户输入的值,却存在于input 所在的组件中, 我们要把子组件中的数据传给父组件。

 

时间: 2024-10-05 23:37:04

React 组件基本使用(3) ---父子组件之间的通信的相关文章

vue知识总结第一篇vue组件的定义以及父子组件的传值。

vue中是一个.vue结尾的vue文件其中包括<template>标签里边写html,而react是在render函数中..script用来写js,style中用来写css.那么我们来看看vue是怎么写的吧 子组件中 1,用export default 导出子组件,其中标红的是用来父子组件传值的this.$emit('reChild')指发送一个自定事件到父组件中,父组件中只要在引入这个子组件标签的时候v-on:reChild="rece"其中rece为父组件中method

Vue_(组件通讯)简单使用父子组件

Vue组件 传送门 在Vue的组件内也可以定义组件,这种关系成为父子组件的关系 如果在一个Vue实例中定义了component-a,然后在component-a中定义了component-b,那他们的关系就是 Vue实例 -- 根组件 root component-a – 相对于root 这是子组件,相对于component-b这是 父组件 component-b -- 子组件 目录结构 简单的通过在父组件调用子组件,但父组件的值是无法直接传递给子组件 <!DOCTYPE html> <

vue教程3-05 vue组件数据传递、父子组件数据获取

vue教程3-05 vue组件数据传递 一.vue默认情况下,子组件也没法访问父组件数据 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script src="bower_components/vue/dist/vue.js"><

小程序开发 组件定义(封装)、组件调用、父子组件方法调用、父子组件传值通讯

在小程序开发中,为了提高代码效率,和代码使用率,我们也用到了组件封装, 今天我介绍下如何在小程序中封装一个头部公用组件 首先,所有父组件(调用页面)的json文件都要引用子组件:index.json { "usingComponents": { "header": "../../component/header/header", } } 一,组件定义(封装) 子组件:header.wxml <view name='header' class

react父子组件传值

react均是以组件构成,那父子组件传值就很重要了 父组件传值给子组件,不仅可以传值,传事件,还可以传实例 1.父组件传值给子组件 传值 父组件: import React from 'react'; import Children from './Children'; class Father extends React.Component { constructor(props) { super(props); this.state = { msg:'父组件的msg' }; } render

React父子组件之间的对话

父组件中引入子组件button,通过ref将组件绑定到父组件上,如果是公用模块,可以直接绑定最外层layout层. <Button cb={() => {console.log('todo something')}} text='下一步' bgArray={['#CDCDCD', '#73B2E6', '#0677DA']} ref={(button) => { this.button = button; }} ></Button> 子组件中暴露外部调用方式,供外部来改

react初探(二)之父子组件通信、封装公共组件

一.前言 在组件方面react和Vue一样的,核心思想玩的就是组件,下面举两个组件常用的情景. 场景一:假如我们现在有一个页面包含表格以及多个弹框,这种时候如果将这个页面的业务代码写在一个组件中,那么这一块的代码会看着非常恶心.如果这个时候我们将这个页面的表格以及弹框这些单独的模块分别写成组件的形式,然后再在这个页面中将这些组件引入进来,那样我们的代码会看着非常整洁.这样做会需要使用到父子组件之间的通信,下面会详细解释. 场景二:日常项目中我们会经常遇到某一个功能会在不同地方使用,但是每次使用的

react native 之子组件和父组件之间的通信

react native开发中,为了封装性经常需要自定义组件,这样就会出现父组件和子组件,那么怎么在父组件和子组件之间相互通信呢,也就是怎么在各自界面push和pop.传值. 父组件传递给子组件: 父组件: 在主组件里面,使用通过写一个子组件的属性,直接把值或者navigator传给子组件即可.如下20行: 1 /** 2 * Sample React Native App 3 * https://github.com/facebook/react-native 4 * 父组件传递给子组件 5

react基础总结篇1,定义组件实现父子组件传值

前端时间学习了vue,这几天开始入手react了. react项目搭建起来之后,我们一定会定义很多个组件.同样的也会涉及到父子组件的传值.今天来整理一下这个知识. 1,定义子组件步骤 1,引入react. import React,{Component} from 'react'; import './style.less'; 2,写组件并export default导出去用到了es6中的calss语法,提前说一下,this.props.content用来接收父组件中content的值,this