iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >React中怎么实现父子组件传递
  • 353
分享到

React中怎么实现父子组件传递

2024-04-02 19:04:59 353人浏览 薄情痞子
摘要

React中怎么实现父子组件传递,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。React的组件生命周期react主要思想是构建可复用组件来构建

React中怎么实现父子组件传递,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

React的组件生命周期

react主要思想是构建可复用组件来构建用户界面。在react里面一切皆组件。每个组件里面都是有自己的生命周期,这个生命周期规定了组件的状态和方法,分别在哪个阶段执行。下面附上一张React的生命周期图:

React中怎么实现父子组件传递

组件第一阶段:初始化、渲染以及装载完成;

组件第二阶段:组件运行时候的状态 ①:状态变化引发组件的更新和重新渲染到更新完成

                ②:父组件属性变化引发组件的更新(是常见的组件之间传递数据和同步状态的手段):比如父组件登录了,子组件也需变成登录状态

组件第三阶段:卸载组件

jsX 语法

const names = ['Alice', 'Emily', 'Kate'];

ReactDOM.render(
 <div>
 {
  names.map((name) => {
   return <div>Hello, {name}!</div>
  })
 }
 </div>,
 document.getElementById('example')
);

JSX 的基本语法规则:遇到 html 标签(以<开头),就用 HTML 规则解析;遇到代码块(以{开头),就用 javascript 规则解析。

所以给jsx添加注释只要这样子:

{}

父组件传向子组件

子:
var HelloMessage = React.createClass({
 render: function() {
  return <h2>Hello {this.props.name}</h2>;
 }
});
---------------------------------------
父:
ReactDOM.render(
 <HelloMessage name="Muyy" />,
 document.getElementById('example')
);

变量HelloMessage就是相当于一个子组件类。通过this.props.name获取到了Muyy。

另外注意

  1. 所有组件类都必须有自己的render方法,用于输出组件。

  2. 组件类的第一个字母必须大写,否则会报错,比如HelloMessage不能写成helloMessage

  3. 组件类只能包含一个顶层标签

  4. class属性需要写成classNamefor属性需要写成htmlFor,这是因为classfor是 JavaScript 的保留字

子组件传向父(爷)组件

其实很简单,概括起来就是:react中state改变了,组件才会update。父组件写好state和处理该state的函数,同时将函数名通过props属性值的形式传入子,子调用父的函数,同时引起state变化。

例子1.这里如下图,用户邮箱为父,绿色框为子。 父组件为用户输入的邮箱设好state,即“{email: ''}”,同时写好处理state的函数,即“handleEmail”,这两个名称随意起;再将函数以props的形式传到子组件,子组件只需在事件发生时,调用父组件传过来的函数即可。

React中怎么实现父子组件传递

//子组件
var Child = React.createClass({
  render: function(){
    return (
      <div>
        请输入邮箱:<input onChange={this.props.handleEmail}/>
      </div>
    )
  }
});
//父组件,此处通过event.target.value获取子组件的值
var Parent = React.createClass({
  getInitialState: function(){
    return {
      email: ''
    }
  },
  handleEmail: function(event){
    this.setState({email: event.target.value});
  },
  render: function(){
    return (
      <div>
        <div>用户邮箱:{this.state.email}</div>
        <Child name="email" handleEmail={this.handleEmail.bind(this)}/>
      </div>
    )
  }
});
React.render(
 <Parent />,
 document.getElementById('test')
);

例子2.有时候往往需要对数据做处理,再传给父组件,比如过滤或者自动补全等等,下面的例子对用户输入的邮箱做简单验证,自动过滤非数字、字母和"@."以外的字符。

React中怎么实现父子组件传递

//子组件,handleVal函数处理用户输入的字符,再传给父组件的handelEmail函数
var Child = React.createClass({
  handleVal: function() {
    var val = this.refs.emailDom.value;
    val = val.replace(/[^0-9|a-z|\@|\.]/ig,"");
    this.props.handleEmail(val);
  },
  render: function(){
    return (
      <div>
        请输入邮箱:<input ref="emailDom" onChange={this.handleVal}/>
      </div>
    )
  }
});
//父组件,通过handleEmail接受到的参数,即子组件的值
var Parent = React.createClass({
  getInitialState: function(){
    return {
      email: ''
    }
  },
  handleEmail: function(val){
    this.setState({email: val});
  },
  render: function(){
    return (
      <div>
        <div>用户邮箱:{this.state.email}</div>
        <Child name="email" handleEmail={this.handleEmail.bind(this)}/>
      </div>
    )
  }
});
React.render(
 <Parent />,
 document.getElementById('test')
);

例子3.如果还存在孙子组件的情况呢?如下图,黑框为父,绿框为子,红框为孙,要求子孙的数据都传给爷爷。原理一样的,只是父要将爷爷对孙子的处理函数直接传下去。

React中怎么实现父子组件传递

//孙子,将下拉选项的值传给爷爷
var Grandson = React.createClass({
  render: function(){
    return (
      <div>性别:
        <select onChange={this.props.handleSelect}>
          <option value="男">男</option>
          <option value="女">女</option>
        </select>
      </div>
    )
  }
});
//子,将用户输入的姓名传给爹 
//对于孙子的处理函数,父只需用props传下去即可
var Child = React.createClass({
  render: function(){
    return (
      <div>
        姓名:<input onChange={this.props.handleVal}/>
        <Grandson handleSelect={this.props.handleSelect}/>
      </div>
    )
  }
});
//父组件,准备了两个state,username和sex用来接收子孙传过来的值,对应两个函数handleVal和handleSelect
var Parent = React.createClass({
  getInitialState: function(){
    return {
      username: '',
      sex: ''
    }
  },
  handleVal: function(event){
    this.setState({username: event.target.value});
  },
  handleSelect: function(event) {
    this.setState({sex: event.target.value});
  },
  render: function(){
    return (
      <div>
        <div>用户姓名:{this.state.username}</div>
        <div>用户性别:{this.state.sex}</div>
        <Child handleVal={this.handleVal.bind(this)} handleSelect={this.handleSelect.bind(this)}/>
      </div>
    )
  }
});
React.render(
 <Parent />,
 document.getElementById('test')
);

getDefaultProps && getInitialState

getDefaultProps方法可以用来设置组件属性的默认值

var MyTitle = React.createClass({
 getDefaultProps : function () {
  return {
   title : 'Hello World'
  };
 },

 render: function() {
   return <h2> {this.props.title} </h2>;
  }
});

ReactDOM.render(
 <MyTitle />,
 document.body
);

getInitialState 方法可以用来设置初始状态

 getInitialState: function() {
  return {liked: false};
 },

获取真实的DOM节点

从组件获取真实 DOM 的节点,这时就要用到ref属性

var MyComponent = React.createClass({
 handleClick: function() {
  this.refs.myTextInput.focus();
 },
 render: function() {
  return (
   <div>
    <input type="text" ref="myTextInput" />
    <input type="button" value="Focus the text input" onClick={this.handleClick} />
   </div>
  );
 }
});

ReactDOM.render(
 <MyComponent />,
 document.getElementById('example')
);

上面代码中,组件MyComponent的子节点有一个文本输入框,用于获取用户的输入。这时就必须获取真实的 DOM 节点,虚拟 DOM 是拿不到用户输入的。为了做到这一点,文本输入框必须有一个ref属性,然后this.refs.[refName]就会返回这个真实的 DOM 节点。

需要注意的是,由于this.refs.[refName]属性获取的是真实 DOM ,所以必须等到虚拟 DOM 插入文档以后,才能使用这个属性,否则会报错。上面代码中,通过为组件指定Click事件的回调函数,确保了只有等到真实 DOM 发生Click事件之后,才会读取this.refs.[refName]属性。

React 组件支持很多事件,除了Click事件以外,还有KeyDownCopyScroll等,完整的事件清单请查看官方文档。

子组件传向父组件的另一种思路

父组件调用子组件的state、function,除了上面介绍的方法之外,也可以通过ref属性实现。推荐使用这种方式进行子组件向父组件的传递。举个简单的示范:

export default class 父组件a extends React.Component {
  constructor(props) {
    super(props)  
  }

  render() {
    return (
     <子组件b
        ref={r => this.bbbb =r} // bbbb自定义名字
     />
    )
  }
}

经过这样处理后后,现在父组件a中可以通过this.bbbb.state.xxx获取子组件的xxx状态,也可以通过this.bbbb.xxx获取子组件的xxx方法。

看完上述内容,你们掌握React中怎么实现父子组件传递的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网VUE频道,感谢各位的阅读!

--结束END--

本文标题: React中怎么实现父子组件传递

本文链接: https://www.lsjlt.com/news/78273.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • React中怎么实现父子组件传递
    React中怎么实现父子组件传递,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。React的组件生命周期react主要思想是构建可复用组件来构建...
    99+
    2024-04-02
  • vue中怎么实现子组件传递数据给父组件
    本篇文章为大家展示了vue中怎么实现子组件传递数据给父组件,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。发送者:modifyName:是接受者的键,也就是发送和接收...
    99+
    2024-04-02
  • 怎么在React中实现父组件和子组件的数据传输
    怎么在React中实现父组件和子组件的数据传输?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一、父组件向子组件传递数据父组件向子组件传递数据是通过在父组件中引用子组件时,在子组...
    99+
    2023-06-14
  • vue中怎么实现父组件向子组件传递多个数据
    本篇文章为大家展示了vue中怎么实现父组件向子组件传递多个数据,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。第一种:静态数据传递:传递一个 字符串第二种:动态数据传...
    99+
    2024-04-02
  • 如何实现angularjs2中父子组件的数据传递
    这篇文章主要介绍如何实现angularjs2中父子组件的数据传递,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!父到子组件之间的数据传递父组件模板中引用子组件 // ...
    99+
    2024-04-02
  • vue中怎么实现子组件向父组件传值
    这篇文章给大家介绍vue中怎么实现子组件向父组件传值,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。父组件这么写<component-a v-on:child-say=&...
    99+
    2024-04-02
  • React父子组件传值(组件通信)的实现方法
    目录1、父组件传值子组件2、子组件传值父组件3、兄弟组件传值1、父组件传值子组件 在引用子组件的时候传递,相当于一个属性,例如:在子组件内通过porps.param获取到这个para...
    99+
    2024-04-02
  • Vue中怎么实现父组件向子组件传值
    这期内容当中小编将会给大家带来有关Vue中怎么实现父组件向子组件传值,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1:在src/components/child/文件夹下...
    99+
    2024-04-02
  • vue中怎么通过父组件向子组件传递数据
    本篇文章为大家展示了vue中怎么通过父组件向子组件传递数据,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 vue页面结构在做项目的时候常常有这样的一个情况...
    99+
    2024-04-02
  • Vue中怎么实现非父子组件传值
    Vue中怎么实现非父子组件传值,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。前置知识: 1. $emit(event...
    99+
    2024-04-02
  • vue中怎么实现父子组件间传值
    今天就跟大家聊聊有关vue中怎么实现父子组件间传值,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。先定义一个子组件,在组件中注册props<te...
    99+
    2024-04-02
  • vue.js中怎么实现父向子组件传参
    vue.js中怎么实现父向子组件传参,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1.新建componentA.vue组件,代...
    99+
    2024-04-02
  • Vue3中怎么修改父组件传递到子组件中的值
    这篇文章主要介绍了Vue3中怎么修改父组件传递到子组件中的值的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue3中怎么修改父组件传递到子组件中的值文章都会有所收获,下面我们一起来看看吧。自定义组件上使用v-m...
    99+
    2023-07-06
  • 浅析Vue中父子组件间怎么通信(父传子|子传父)
    1、父组件传递给子组件⭐⭐父组件传递给子组件:通过props属性;【相关推荐:vuejs视频教程、web前端开发】子组件传递给父组件:通过$emit触发事件;  这里我们知道,父组件有一些数据需要子组件来进行展示,那我们可以通过props来...
    99+
    2022-11-22
    组件通信 组件 Vue
  • Vue父子传递方式怎么实现
    本篇内容介绍了“Vue父子传递方式怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!实现功能:1、子组件的input输入,改变父组件信息...
    99+
    2023-07-04
  • Vue父子组件属性传递实现方法详解
    目录前言组件之间属性的传递父组件传递属性给子组件子组件传递属性给父组件前言 这节我们主要从案例出发,用Vue3的写法写父子组件之间的属性传递。 组件之间属性的传递 我们定义一个Rat...
    99+
    2023-02-08
    Vue父子组件属性传递 Vue属性传递 Vue父子组件传递
  • vue中怎么实现父组件向子组件动态传值
    这篇文章将为大家详细讲解有关vue中怎么实现父组件向子组件动态传值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。方法有两种,方法一:props传值,这里注意...
    99+
    2024-04-02
  • Angular中父子组件间如何传递数据
    这篇文章主要介绍Angular中父子组件间如何传递数据,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!环境:Angular CLI: 11.0.6Angular: 11.0.7Node...
    99+
    2024-04-02
  • React如何实现父子组件通信
    这篇文章主要介绍React如何实现父子组件通信,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!父子组件通信原理:父组件通过props(与vue中的props区分开)向子组件通信,子组件...
    99+
    2024-04-02
  • vue中子组件向父组件传递数据如何实现加减功能
    小编给大家分享一下vue中子组件向父组件传递数据如何实现加减功能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!如下图所示:当没有任何操作的时候父组件的值是 0当点击加号以后父组件的值是 1...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作