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 相关文章推荐
JavaScript 脚本将当地时间转换成其它时区
Mar 19 Javascript
Javascript 继承机制实例
Aug 12 Javascript
首页图片漂浮效果示例代码
Jun 05 Javascript
Node.js实现在目录中查找某个字符串及所在文件
Sep 03 Javascript
JavaScript实现简单图片翻转的方法
Apr 17 Javascript
解决jQuery uploadify在非IE核心浏览器下无法上传
Aug 05 Javascript
jQuery实现漂亮实用的商品图片tips提示框效果(无图片箭头+阴影)
Apr 16 Javascript
基于JS实现省市联动效果代码分享
Jun 06 Javascript
JavaScript之cookie技术详解
Nov 18 Javascript
整理一些最近经常遇到的前端面试题
Apr 25 Javascript
NestJs 静态目录配置详解
Mar 12 Javascript
JS前端知识点 运算符优先级,URL编码与解码,String,Math,arguments操作整理总结
Jun 27 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
配置支持SSI
2006/11/25 PHP
关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
2013/06/24 PHP
php判断是否为json格式的方法
2014/03/04 PHP
表单填写时用回车代替TAB的实现方法
2007/10/09 Javascript
editable.js 基于jquery的表格的编辑插件
2011/10/24 Javascript
使用jQuery实现更改默认alert框体
2015/04/13 Javascript
Javascript验证Visa和MasterCard信用卡号的方法
2015/07/27 Javascript
移动端滑动插件Swipe教程
2016/10/16 Javascript
关于微信上网页图片点击全屏放大效果
2016/12/19 Javascript
js模拟支付宝密码输入框
2017/04/11 Javascript
JavaScript实现图片轮播特效
2019/10/23 Javascript
Vue组件间数据传递的方式(3种)
2020/07/13 Javascript
基于JS实现计算24点算法代码实例解析
2020/07/23 Javascript
[01:03:50]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第二场 2月7日
2021/03/11 DOTA
Python使用Flask框架同时上传多个文件的方法
2015/03/21 Python
python删除指定类型(或非指定)的文件实例详解
2015/07/06 Python
你眼中的Python大牛 应该都有这份书单
2017/10/31 Python
python pygame实现滚动横版射击游戏城市之战
2019/11/25 Python
Python 实现递归法解决迷宫问题的示例代码
2020/01/12 Python
在PyTorch中使用标签平滑正则化的问题
2020/04/03 Python
史上最详细的Python打包成exe文件教程
2021/01/17 Python
eBay德国站:eBay.de
2017/09/14 全球购物
韩国保养品、日本药妆购物网:小三美日
2018/12/30 全球购物
师范大学毕业自我鉴定
2013/11/21 职场文书
构建高效课堂实施方案
2014/03/13 职场文书
小学新学期寄语
2014/04/02 职场文书
《称象》教学反思
2014/04/25 职场文书
读书伴我成长演讲稿
2014/05/07 职场文书
安全生产月宣传标语
2014/10/06 职场文书
人事任命通知书
2015/04/21 职场文书
给老婆的检讨书(搞笑版)
2015/05/06 职场文书
劳动模范获奖感言
2015/07/31 职场文书
责任书格式
2019/04/18 职场文书
Python集合的基础操作
2021/11/01 Python
苹果M1芯片安装nginx 并且部署vue项目步骤详解
2021/11/20 Servers
Python使用pandas导入csv文件内容的示例代码
2022/12/24 Python