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 (十) jQueryUI常用功能实战
Feb 23 Javascript
JS控制日期显示的小例子
Nov 23 Javascript
jquery实现瀑布流效果分享
Mar 26 Javascript
JS模拟并美化的表单控件完整实例
Aug 19 Javascript
多种JQuery循环滚动文字图片效果代码
Jun 23 Javascript
JS闭包、作用域链、垃圾回收、内存泄露相关知识小结
May 16 Javascript
详解JavaScript中this关键字的用法
May 26 Javascript
实用jquery操作表单元素的简单代码
Jul 04 Javascript
angularjs实现文字上下无缝滚动特效代码
Sep 04 Javascript
JS实现表单验证功能(验证手机号是否存在,验证码倒计时)
Oct 11 Javascript
js实现键盘自动打字效果
Dec 23 Javascript
基于Bootstrap 3 JQuery及RegExp的表单验证功能
Feb 16 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网上调查系统
2006/10/09 PHP
PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
2014/07/15 PHP
超强多功能php绿色集成环境详解
2017/01/25 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
2017/11/17 PHP
laravel 解决Validator使用中出现的问题
2019/10/25 PHP
关于B/S判断浏览器断开的问题讨论
2008/10/29 Javascript
javascript 年月日联动实现核心代码
2009/12/21 Javascript
GWT中复制到剪贴板 js+flash实现复制 兼容性比较好
2010/03/07 Javascript
从零开始学习jQuery (二) 万能的选择器
2010/10/01 Javascript
基于jquery的一行代码轻松实现拖动效果
2010/12/28 Javascript
jQuery.get、jQuery.getJSON、jQuery.post无法返回JSON问题的解决方法
2011/07/28 Javascript
一个CSS+jQuery实现的放大缩小动画效果
2014/02/19 Javascript
Javascript获取CSS伪元素属性的实现代码
2014/09/28 Javascript
最新最热最实用的15个jQuery插件汇总
2015/07/05 Javascript
BootStrap+Angularjs+NgDialog实现模式对话框
2016/08/24 Javascript
Bootstrap Table从零开始
2017/06/30 Javascript
JS实现unicode和UTF-8之间的互相转换互转
2017/07/05 Javascript
vue.js组件之间传递数据的方法
2017/07/10 Javascript
全选复选框JavaScript编写小结(附代码)
2017/08/16 Javascript
JS实现点击复选框变更DIV显示状态的示例代码
2017/12/18 Javascript
微信小程序实现跑马灯效果
2020/10/21 Javascript
Python 爬虫之超链接 url中含有中文出错及解决办法
2017/08/03 Python
Django框架多表查询实例分析
2018/07/04 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
2018/10/29 Python
在Python函数中输入任意数量参数的实例
2019/07/16 Python
对python中的float除法和整除法的实例详解
2019/07/20 Python
浅析PEP570新语法: 只接受位置参数
2019/10/15 Python
利用python爬取有道词典的方法
2020/12/08 Python
马克华菲官方商城:Mark Fairwhale
2016/09/04 全球购物
黄色火烈鸟:De Gele Flamingo
2019/03/18 全球购物
Onzie官网:美国时尚瑜伽品牌
2019/08/21 全球购物
师范教师毕业鉴定
2014/01/13 职场文书
火车的故事教学反思
2014/02/11 职场文书
简单租房协议书(范本)
2014/10/13 职场文书
2015秋季开学典礼致辞
2015/07/16 职场文书
python迷宫问题深度优先遍历实例
2021/06/20 Python