一、组件的定义

1、使用JavaScript函数定义 Welcome.js

import React from 'react';

function Welcome() {
return (
<div>我是一个组件</div>
);
} export default Welcome;

2、使用 ES6 class 定义 Welcome.js

import React from 'react';

class Welcome extends React.Component {
render() {
return (
<div>我是一个组件</div>
);
}
} export default Welcome;

二、组件的渲染

index.js 文件:

import React from 'react';
import ReactDOM from 'react-dom';
import Welcome from './Welcome'; ReactDOM.render(
<Welcome />,
document.getElementById('root')
);

三、复合组件

1、通过创建多个组件来合成一个组件

import React from 'react';

function Name(props) {
return (
<p>我是{props.name}</p>
);
} function Age(props) {
return (
<p>我{props.age}岁</p>
);
} function Sex(props) {
return (
<p>我是一个{props.sex}人</p>
);
} function Me() {
return (
<div>
<Name name="海牛大大" />
<Age age="22" />
<Sex sex="男" />
</div>
);
} export default Me;

2、渲染合成的组件

import React from 'react';
import ReactDOM from 'react-dom';
import Me from './Me'; ReactDOM.render(
<Me />,
document.getElementById('root')
);

运行结果:

四、组件之间的传值

1、父组件传给子组件

父组件通过自定义属性进行传值,这里以传 lastName 的值为例:

Parent.js

import React from 'react'
import Child from './Child' class Parent extends React.Component {
render() {
return (
<div>
<Child lastName='Liu' />
</div>
)
}
} export default Parent;

子组件通过 this.props 获取,这里接收父组件传过来 lastName 的值

Child.js

import React from 'react'

class Child extends React.Component {
constructor(props) {
super(props);
this.state = {}
}
render() {
return (
<div>
<h1>My lastname is {this.props.lastName}</h1>
</div>
)
}
} export default Child;

渲染父组件:

ReactDOM.render(
<div><Parent /></div>,
document.getElementById('root')
);

运行结果:

2、子组件传给父组件

利用回调来完成,父组件传递一个函数,这里以传 fn 为例

import React from 'react'
import Child from './Child' class Parent extends React.Component {
constructor(props) {
super(props);
this.state = {
fontColor: ''
}
} render() {
return (
<div>
<h1 style={{color:this.state.fontColor}}>标题</h1>
<Child fn={(e) => this.setState({fontColor: e})} />
</div>
)
}
} export default Parent;

子组件将要传递的值作为参数,并调用父组件传递的函数,这里将 red 作为参数调用

import React from 'react'

class Child extends React.Component {
constructor(props) {
super(props);
this.state = {}
} render() {
return (
<div>
<button onClick={(e) => this.props.fn('red')}>
单击改变标题颜色
</button>
</div>
)
}
} export default Child;

运行结果:

3、兄弟组件之间的传值

A子组件先传给父组件,父组件再传给B子组件

React组件的定义、渲染和传值总结的更多相关文章

  1. 关于React组件之间如何优雅地传值的探讨

    闲话不多说,开篇撸代码,你可以会看到类似如下的结构: import React, { Component } from 'react'; // 父组件 class Parent extends Com ...

  2. React组件复用的方式

    React组件复用的方式 现前端的工程化越发重要,虽然使用Ctrl+C与Ctrl+V同样能够完成需求,但是一旦面临修改那就是一项庞大的任务,于是减少代码的拷贝,增加封装复用能力,实现可维护.可复用的代 ...

  3. react组件间的传值方法

    关于react的几个网站: http://react.css88.com/ 小书:http://huziketang.mangojuice.top/books/react/ http://www.re ...

  4. 编写高性能React组件-传值篇

    很多人在写React组件的时候没有太在意React组件的性能,使得React做了很多不必要的render,现在我就说说该怎么来编写搞性能的React组件. 首先我们来看一下下面两个组件 import ...

  5. react 组件之间传值

    谈及React时,就会想到一个很重要的思想,就是组件化思想.它将可以重用的部分进行组件化开发,形成一个个相对独立的组件,那么组件化后,你也会提出些疑问,组件与组件之间,将怎样进行信息的传递呢?下面来介 ...

  6. React组件之间通过Props传值的技巧(小案例,帮助体会理解props、state、受控组件和非受控组件等)

    本文重要是根据react小书上的一个很简单的例子改编的,加上自己的学习理解,希望可以通过实际案例让大家对概念有更清晰的理解,当然也希望能一块学习. import React,{Component} f ...

  7. React 组件间传值

    壹  .了解React传值的数据 一. 创建组件的方法 一 . 1  通过function声明的组件特点是: 1)function创建的组件是没有state属性,而state属性决定它是不是有生命周期 ...

  8. 深入了解React组件重新渲染的条件和生命周期

    React组件rerender的真正条件 当前组件的State中的属性改变时且当前组件的shouldcomponentupdate返回true,那么当前组件会rerender 组件的props中的任一 ...

  9. React 组件条件渲染的几种方式

    一.条件表达式渲染 (适用于两个组件二选一的渲染) render() { const isLoggedIn = this.state.isLoggedIn; return ( <div> ...

随机推荐

  1. Java分布式:分布式事务

    Java分布式:分布式事务 分布式事务 分布式事务就是指事务的参与者.支持事务的服务器.资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上.简单的说,就是一次大的操作由不同的小操作组成,这 ...

  2. ggplot绘图之基本语法

    ggplot绘图之基本语法 2018年09月03日 22:29:56 一个人旅行*-* 阅读数 4332更多 分类专栏: R语言   1.ggplot2图形之基本语法: ggplot2的核心理念是将绘 ...

  3. golang实现无限级菜单(beego框架下)

    原文地址  http://www.niu12.com/article/37 golang实现无限级菜单(beego框架下) 数据表如下 -- ---------------------------- ...

  4. Charles 抓包配置

    本文参考:charles 抓包配置 proxy setting (代理设置) 设置的主界面如下: 动态端口 启用动态端口选项来监听动态端口,每次查询启动时选择.这样可以避免与计算机上可能运行的其他网络 ...

  5. 【GStreamer开发】GStreamer基础教程07——多线程和Pad的有效性

    目标 GStreamer会自动处理多线程这部分,但在有些情况下,你需要手动对线程做解耦.本教程会教你怎样才能做到这一点,另外也展示了Pad的有效性.主要内容包括: 如何针对部分的pipeline建立一 ...

  6. C之volatile

    https://blog.csdn.net/vay0721/article/details/79035854 https://blog.csdn.net/kaychangeek/article/det ...

  7. smarty中常用的流程控制逻辑

    if else {if $age > 18} <div>年满十八岁!</div> {else if $age > 16} <div>年满十六岁!< ...

  8. k8s开发实践

    代码自动生成:https://blog.openshift.com/kubernetes-deep-dive-code-generation-customresources/ 自定义controlle ...

  9. 【并发】7、借助redis 实现多线程生产消费队列

    1.这是第一个简单的初始化版本,看起来比使用fqueue似乎更好用 package queue.redisQueue; import queue.fqueue.vo.TempVo; import re ...

  10. oracle-3-Linux-11g安装-图形安装

    在安装系统时就安装了图形桌面 参考博客地址:https://www.cnblogs.com/tibit/p/6134150.html 未参考,只是感觉不错:https://blog.csdn.net/ ...