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程序员应该知道的45个实用技巧
Mar 04 Javascript
JS中判断JSON数据是否存在某字段的方法
Mar 07 Javascript
用JavaScript获取页面文档内容的实现代码
Jun 10 Javascript
input框中的name和id的区别
Nov 16 Javascript
JavaScript之cookie技术详解
Nov 18 Javascript
浅谈jquery页面初始化的4种方式
Nov 27 Javascript
Vue.js第二天学习笔记(vue-router)
Dec 01 Javascript
node.js利用redis数据库缓存数据的方法
Mar 01 Javascript
js将当前时间格式化为 年-月-日 时:分:秒的实现代码
Jan 20 Javascript
js实现无限瀑布流实例方法
Sep 16 Javascript
使用webpack搭建vue环境的教程详解
Dec 31 Javascript
jQuery实现B2B网站后台管理系统侧导航
Jul 08 jQuery
分分钟学会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实现Session入库/存入redis的方法
2017/05/04 PHP
Linux下 php7安装redis的方法
2018/11/01 PHP
popdiv
2006/07/14 Javascript
一个XML格式数据转换为图表的例子
2010/02/09 Javascript
jQuery为iframe的body添加click事件的实现代码
2011/04/07 Javascript
两个listbox实现选项的添加删除和搜索
2013/03/01 Javascript
页面图片浮动左右滑动效果的简单实现案例
2014/02/10 Javascript
深入探究使JavaScript动画流畅的一些方法
2015/06/30 Javascript
js实现的早期滑动门菜单效果代码
2015/08/27 Javascript
浅析nodejs实现Websocket的数据接收与发送
2015/11/19 NodeJs
详解Angularjs filter过滤器
2016/02/06 Javascript
JavaScript切换搜索引擎的导航网页搜索框实例代码
2017/06/11 Javascript
JS删除数组里的某个元素方法
2018/02/03 Javascript
Node.js readline 逐行读取、写入文件内容的示例
2018/03/01 Javascript
15分钟深入了解JS继承分类、原理与用法
2019/01/19 Javascript
JQuery事件委托(适用于给动态生成的脚本元素添加事件)
2020/02/01 jQuery
VSCode 配置uni-app的方法
2020/07/11 Javascript
Python中__name__的使用实例
2015/04/14 Python
Python通过DOM和SAX方式解析XML的应用实例分享
2015/11/16 Python
python dict 字典 以及 赋值 引用的一些实例(详解)
2017/01/20 Python
python 编程之twisted详解及简单实例
2017/01/28 Python
浅谈python 读excel数值为浮点型的问题
2018/12/25 Python
Python对ElasticSearch获取数据及操作
2019/04/24 Python
python模块hashlib(加密服务)知识点讲解
2019/11/25 Python
Python3 元组tuple入门基础
2020/02/09 Python
用Python 爬取猫眼电影数据分析《无名之辈》
2020/07/24 Python
浅谈CSS3鼠标移入图片动态提示效果(transform)
2017/11/06 HTML / CSS
计算机专业自我鉴定
2013/10/15 职场文书
中文专业毕业生自荐信
2013/10/28 职场文书
业务主管岗位职责范本
2013/12/25 职场文书
手机被没收检讨书
2014/02/22 职场文书
植树节活动总结
2014/04/30 职场文书
幼儿园大班开学寄语
2014/08/02 职场文书
门卫岗位职责
2015/02/09 职场文书
质检员岗位职责范本
2015/04/07 职场文书
创业计划书之养殖业
2019/10/11 职场文书