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 相关文章推荐
jQuery中(function(){})()执行顺序的理解
Mar 05 Javascript
js操作iframe的一些方法介绍
Jun 25 Javascript
如何设置iframe高度自适应在跨域情况下的可用方法
Sep 06 Javascript
使用JS CSS去除IE链接虚线框的三种方法
Nov 14 Javascript
举例说明JavaScript中的实例对象与原型对象
Mar 11 Javascript
微信小程序日历组件calendar详解及实例
Jun 08 Javascript
angular4 如何在全局设置路由跳转动画的方法
Aug 30 Javascript
react-router v4如何使用history控制路由跳转详解
Jan 09 Javascript
js中let和var定义变量的区别
Feb 08 Javascript
jQuery实现轮播图及其原理详解
Apr 12 jQuery
微信小程序可滑动周日历组件使用详解
Oct 21 Javascript
多个Vue项目部署到服务器的步骤记录
Oct 22 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
不错的新闻标题颜色效果
2006/12/10 Javascript
xss文件页面内容读取(解决)
2010/11/28 Javascript
javascript的原生方法获取数组中的最大(最小)值
2012/12/19 Javascript
javascript验证身份证完全方法具体实现
2013/11/18 Javascript
JavaScript中的对象序列化介绍
2014/12/30 Javascript
基于replaceChild制作简单的吞噬特效
2015/09/21 Javascript
javascript基本语法
2016/05/31 Javascript
Javascript将JSON日期格式化
2016/08/23 Javascript
JS前端笔试题分析
2016/12/19 Javascript
Vue数据驱动模拟实现5
2017/01/13 Javascript
React-Native使用Mobx实现购物车功能
2017/09/14 Javascript
用vue构建多页面应用的示例代码
2017/09/20 Javascript
微信小程序页面跳转功能之从列表的item项跳转到下一个页面的方法
2017/11/27 Javascript
使用Vue.js 和Chart.js制作绚丽多彩的图表
2019/06/15 Javascript
JS实现简单随机3D骰子
2019/10/24 Javascript
详解如何在JS代码中消灭for循环
2019/12/11 Javascript
js实现简单扫雷
2020/11/27 Javascript
JS继承实现方法及优缺点详解
2020/09/02 Javascript
探寻python多线程ctrl+c退出问题解决方案
2014/10/23 Python
python实现数组插入新元素的方法
2015/05/22 Python
Python实现查找系统盘中需要找的字符
2015/07/14 Python
Python向Excel中插入图片的简单实现方法
2018/04/24 Python
Python基于jieba库进行简单分词及词云功能实现方法
2018/06/16 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
Python urlopen()和urlretrieve()用法解析
2020/01/07 Python
python GUI库图形界面开发之PyQt5工具栏控件QToolBar的详细使用方法与实例
2020/02/28 Python
tensorflow使用freeze_graph.py将ckpt转为pb文件的方法
2020/04/22 Python
浅析关于Keras的安装(pycharm)和初步理解
2020/10/23 Python
SAZAC的动物连体衣和动物睡衣:Kigurumi Shop
2020/03/14 全球购物
计算机专业个人求职信范例
2013/09/23 职场文书
幼儿园教师节活动方案
2014/02/02 职场文书
新春寄语大全
2014/04/09 职场文书
少先队活动总结
2014/08/29 职场文书
干部考察材料范文
2014/12/24 职场文书
Python使用海龟绘图实现贪吃蛇游戏
2021/06/18 Python
Android存储中最基本的文件存储方式
2022/04/30 Java/Android