react 父组件与子组件之间的值传递的方法


Posted in Javascript onSeptember 14, 2017

概念上,组件是封闭的环境。React中是单向数据流的设计,也就是是说只有父组件传递资料给子组件这回事。以正确的技术说明,拥有者组件可以设置被拥有者组件中的数据。

那么子组件要如何与父组件沟通这件事,简单的来说,是一种迂回的作法,在父组件中设置了一个方法(函数),然后传递给子组件的props,子组件在事件触发时,直接呼叫这个props所设置的方法(函数)。但这中间,有谁(对象)呼叫了函数的设置,也就是this的作用。

父组件到子组件用props设置,子组件到父组件用上面说的方式,这是基本的套路,但它只适用于简单的组件结构,因为它相当麻烦,而且不灵活。那么如果要作到子组件与子组件要彼此沟通这件事,就不是太容易。当然,我想你已经听过,复杂的应用需要额外使用flux或redux来解决这问题,这是必经之路。

不过,在思考整体的React应用设计时,要有应用领域状态,也就是全局状态的概念。第一是应用领域state(状态)的,通常会在父组件中,而不是子组件中,子组件有可能很多,位于树状结构很深的地方。

例子:

子组件

import React, { Component } from 'react'

export default class Item extends Component {
 constructor(props) {
  super(props)

  this.state = {
   prices: 0
  }
 }

 handleChange(){
  const prices =800;
  this.setState({
   prices: price
  })
  //用传过来的changePrice属性(props),是个函数,呼叫它把price交给父组件中的函数去处理
  this.props.changePrice(price)
 }

 render() {
  const { prices } = this.state;
    return (
     <div>
       <div onChange={this.handleChange.bind(this)}>
       </div>
       <p>{prices}</p>
     </div>
    )
 }
}

父组件

import React, { Component } from 'react';
import Item from './Item'

class App extends Component {
 constructor(props) {
  super(props)

  this.state = {price: 0}
 }
 
 //给子组件用来传price用的方法
 changePrice(price){
  this.setState({price: price})
 }

 render() {
  return (
   <div>
    <Item changePrice={this.changePrice.bind(this)}/>
    <p>{this.state.price}</p>
   </div>
  );
 }
}

export default App;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
safari,opera嵌入iframe页面cookie读取问题解决方法
Jun 23 Javascript
jQuery基本过滤选择器使用介绍
Apr 18 Javascript
JS实现文字链接感应鼠标淡入淡出改变颜色的方法
Feb 26 Javascript
Angular发布1.5正式版,专注于向Angular 2的过渡
Feb 18 Javascript
JavaScript中数组的22种方法必学(推荐)
Jul 20 Javascript
window.open打开窗口被拦截的快速解决方法
Aug 04 Javascript
Javascript中的对象和原型(二)
Aug 12 Javascript
详解JS中的快速排序与冒泡
Jan 10 Javascript
深入探讨JavaScript的最基本部分之执行上下文
Feb 12 Javascript
JavaScript面向对象中接口实现方法详解
Jul 24 Javascript
JavaScript实现简单动态表格
Dec 02 Javascript
javascript实现时钟动画
Dec 03 Javascript
分分钟学会vue中vuex的应用(入门教程)
Sep 14 #Javascript
JS中跳出循环的示例代码
Sep 14 #Javascript
JS验证码实现代码
Sep 14 #Javascript
快速将Vue项目升级到webpack3的方法步骤
Sep 14 #Javascript
浅谈vue中数据双向绑定的实现原理
Sep 14 #Javascript
JavaScript动态绑定详解
Sep 14 #Javascript
React-Native使用Mobx实现购物车功能
Sep 14 #Javascript
You might like
用php获取远程图片并把它保存到本地的代码
2008/04/07 PHP
php与Mysql的一些简单的操作
2015/02/26 PHP
ThinkPHP开发框架函数详解:C方法
2015/08/14 PHP
IE7中javascript操作CheckBox的checked=true不打勾的解决方法
2009/12/07 Javascript
用jquery实现等比例缩放图片效果插件
2010/07/24 Javascript
自写简单JS判断是否已经弹出页面
2010/10/20 Javascript
jQuery中创建实例与原型继承揭秘
2011/12/21 Javascript
JavaScript可否多线程? 深入理解JavaScript定时机制
2012/05/23 Javascript
Query中click(),bind(),live(),delegate()的区别
2013/11/19 Javascript
浅析jQuery EasyUI中的tree使用指南
2014/12/18 Javascript
JSON与XML优缺点对比分析
2015/07/17 Javascript
Javascript下拉刷新的简单实现
2017/02/14 Javascript
又一款MVVM组件 构建自己的Vue组件(2)
2017/03/13 Javascript
React Native react-navigation 导航使用详解
2017/12/01 Javascript
vue2.x集成百度UEditor富文本编辑器的方法
2018/09/21 Javascript
Layer组件多个iframe弹出层打开与关闭及参数传递的方法
2019/09/25 Javascript
详解vue 自定义组件使用v-model 及探究其中原理
2019/10/11 Javascript
微信小程序实现点击图片放大预览
2019/10/21 Javascript
Python通过90行代码搭建一个音乐搜索工具
2015/07/29 Python
pandas数据处理基础之筛选指定行或者指定列的数据
2018/05/03 Python
python opencv实现切变换 不裁减图片
2018/07/26 Python
pygame游戏之旅 添加游戏暂停功能
2018/11/21 Python
浅谈tensorflow 中tf.concat()的使用
2020/02/07 Python
Python run()函数和start()函数的比较和差别介绍
2020/05/03 Python
python中slice参数过长的处理方法及实例
2020/12/15 Python
H&M旗下高端女装品牌:& Other Stories
2018/05/07 全球购物
奢华时尚的创新平台:Baltini
2020/10/03 全球购物
服务之星获奖感言
2014/01/21 职场文书
聚美优品广告词改编
2014/03/14 职场文书
廉洁自律演讲稿
2014/05/22 职场文书
活动总结报告怎么写
2014/07/03 职场文书
学习保证书
2015/01/17 职场文书
2015年大学生村官工作总结
2015/04/21 职场文书
详解如何使用Node.js实现热重载页面
2021/05/06 Javascript
pytorch 两个GPU同时训练的解决方案
2021/06/01 Python
A22国内电台短波广播频率表
2022/05/10 无线电