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表单验证代码
Aug 02 Javascript
JavaScript 原型学习总结
Oct 29 Javascript
jQuery学习笔记 操作jQuery对象 CSS处理
Sep 19 Javascript
Javascript的闭包详解
Dec 26 Javascript
js+html5实现canvas绘制简单矩形的方法
Jun 05 Javascript
javascript中setInterval的用法
Jul 19 Javascript
JavaScript中循环遍历Array与Map的方法小结
Mar 12 Javascript
jQuery获取父元素节点、子元素节点及兄弟元素节点的方法
Apr 14 Javascript
使用JS批量选中功能实现更改数据库中的status状态值(批量展示)
Nov 22 Javascript
浅谈webpack下的AOP式无侵入注入
Nov 12 Javascript
vue2.0在没有dev-server.js下的本地数据配置方法
Feb 23 Javascript
JS实现520 表白简单代码
May 21 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
收音机指标测试方法及仪器
2021/03/01 无线电
PHP4实际应用经验篇(2)
2006/10/09 PHP
php中的登陆login
2007/01/18 PHP
从一个不错的留言本弄的mysql数据库操作类
2007/09/02 PHP
PHP中执行MYSQL事务解决数据写入不完整等情况
2014/01/07 PHP
PHP中使用asort进行中文排序失效的问题处理
2014/08/18 PHP
php实现用于计算执行时间的类实例
2015/04/18 PHP
PHP中的事务使用实例
2015/05/26 PHP
laravel框架查询数据集转为数组的两种方法
2019/10/10 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
2020/03/26 PHP
Microsoft Ajax Minifier 压缩javascript的方法
2010/03/05 Javascript
鼠标事件延时切换插件
2011/03/12 Javascript
js函数的延迟加载实现代码
2012/10/11 Javascript
js禁止页面使用右键(简单示例代码)
2013/11/13 Javascript
jQuery验证插件validation使用指南
2015/04/21 Javascript
jQuery+CSS3+Html5实现弹出层效果实例代码(附源码下载)
2016/05/16 Javascript
jQuery+CSS实现简单切换菜单示例
2016/07/27 Javascript
vue.js默认路由不加载linkActiveClass问题的解决方法
2017/12/11 Javascript
js中getBoundingClientRect的作用及兼容方案详解
2018/02/01 Javascript
JavaScript高级函数应用之分时函数实例分析
2018/08/03 Javascript
图文讲解vue的v-if使用方法
2019/02/11 Javascript
Vue切换组件实现返回后不重置数据,保留历史设置操作
2020/07/21 Javascript
[00:52]DOTA2国际邀请赛
2020/02/21 DOTA
在Python中使用itertools模块中的组合函数的教程
2015/04/13 Python
Python Socket使用实例
2017/12/18 Python
Python3.x+pyqtgraph实现数据可视化教程
2020/03/14 Python
django model的update时auto_now不被更新的原因及解决方式
2020/04/01 Python
python--shutil移动文件到另一个路径的操作
2020/07/13 Python
班组长竞聘书
2014/03/31 职场文书
活动总结模板
2014/05/09 职场文书
2014年收银工作总结
2014/11/13 职场文书
限期整改通知书
2015/04/22 职场文书
国庆阅兵观后感
2015/06/15 职场文书
2016学习医德医风心得体会
2016/01/25 职场文书
python本地文件服务器实例教程
2021/05/02 Python
CSS作用域(样式分割)的使用汇总
2021/11/07 HTML / CSS