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 相关文章推荐
js实现权限树的更新权限时的全选全消功能
Feb 17 Javascript
IE和firefox浏览器的event事件兼容性汇总
Dec 06 Javascript
Javascript this 的一些学习总结
Aug 02 Javascript
使用js检测浏览器是否支持html5中的video标签的方法
Mar 12 Javascript
jquery easyui 结合jsp简单展现table数据示例
Apr 18 Javascript
js单词形式的运算符
May 06 Javascript
JS实现带鼠标效果的头像及文章列表代码
Sep 27 Javascript
BootStrapTable 单选及取值的实现方法
Jan 10 Javascript
vue升级之路之vue-router的使用教程
Aug 14 Javascript
React 使用recharts实现散点地图的示例代码
Dec 07 Javascript
ES6学习笔记之let与const用法实例分析
Jan 22 Javascript
WebWorker 封装 JavaScript 沙箱详情
Nov 02 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/10/09 PHP
PHP 编程安全性小结
2010/01/08 PHP
php去掉字符串的最后一个字符附substr()的用法
2011/03/23 PHP
PHP取整函数:ceil,floor,round,intval的区别详细解析
2013/08/31 PHP
PHP获取页面执行时间的方法(推荐)
2016/12/10 PHP
你可能不再需要JQUERY
2021/03/09 Javascript
javascript与jquery中跳出循环的区别总结
2013/11/04 Javascript
JQuery实现当鼠标停留在某区域3秒后自动执行
2014/09/09 Javascript
Node.js中HTTP模块与事件模块详解
2014/11/14 Javascript
jQuery选择器之基本选择器与层次选择器
2015/03/03 Javascript
javascript中attachEvent用法实例分析
2015/05/14 Javascript
jQuery实用小技巧_输入框文字获取和失去焦点的简单实例
2016/08/25 Javascript
canvas绘制表盘时钟
2017/01/23 Javascript
自制简易打赏功能的实例
2017/09/02 Javascript
基于ajax和jsonp的原生封装(实例)
2017/10/16 Javascript
为vue-router懒加载时下载js的过程中添加loading提示避免无响应问题
2018/04/03 Javascript
NodeJS 中Stream 的基本使用
2018/07/30 NodeJs
Vue学习之组件用法实例详解
2020/01/06 Javascript
Vue之封装公用变量以及实现方式
2020/07/31 Javascript
Django中利用filter与simple_tag为前端自定义函数的实现方法
2017/06/15 Python
centos 安装python3.6环境并配置虚拟环境的详细教程
2018/02/22 Python
Python下调用Linux的Shell命令的方法
2018/06/12 Python
python实现抖音视频批量下载
2018/06/20 Python
python绘制直线的方法
2018/06/30 Python
python mqtt 客户端的实现代码实例
2019/09/25 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
2020/03/31 Python
python中doctest库实例用法
2020/12/31 Python
医学生自我鉴定范文
2013/11/08 职场文书
大学生新闻专业个人自我评价
2013/11/12 职场文书
高级工程师岗位职责
2013/12/15 职场文书
工程专业求职自荐书范文
2014/02/08 职场文书
竞聘上岗演讲稿
2014/05/16 职场文书
清洁工个人总结
2015/03/04 职场文书
义诊活动通知
2015/04/24 职场文书
七年级作文之游记
2019/12/11 职场文书
Python使用UDP实现720p视频传输的操作
2021/04/24 Python