React学习笔记 - 组件&Props

React Learn Note 4

React学习笔记(四)

标签(空格分隔): React JavaScript


三、组件&Props

组件可以将UI切分成一些独立的、可复用的部件,这样你就只需专注于构建每一个单独的部件。

组件接收props,返回react元素。

1. 函数定义\类定义组件

最简单组件方式 - 函数定义组件

// 函数定义组件
function Welcome(props) {
    return <h1>Hello, {props.name}!</h1>;
}

ES6 class定义组件,效果同上:

// ES6 class定义组件
class Welcome extends React.Component {
    render() {
        return <h1>Hello, {this.props.name}!</h1>;
    }
}

2. 组件渲染

将组件作为React元素,标签的属性作为props键值:

const element5_1 = <Welcome name="Sara"></Welcome>;
ReactDOM.render(
    element5_1,
    document.getElementById(‘root5‘)
);

警告:

组件名称必须大写字母开头。

3. 组合组件

React组件也可以嵌套。

function App() {
    return (
        <div>
            <Welcome name="Bob"></Welcome>
            <Welcome name="Cahal"></Welcome>
            <Welcome name="John"></Welcome>
        </div>
    );
}

ReactDOM.render(
    <App></App>,
    document.getElementById(‘root6‘)
);

警告:

组件的返回值只能有一个根元素。所以将多个Welcome元素用div包裹。

4. 提取组件

可以将组件切分为更小的组件。

function formatDate(date) {
    return date.toLocaleTimeString();
}
function Comment(props) {
    return (
      <div className="Comment">
          <div className="UserInfo">
              <img src={props.author.avatarUrl} alt={props.author.name}/>
              <div className="UserInfo-name">
                  {props.author.name}
              </div>
          </div>
          <div className="Comment-text">
              {props.text}
          </div>
          <div className="Comment-date">
              {formatDate(props.date)}
          </div>
      </div>
    );
}

ReactDOM.render(
    <Comment author={{avatarUrl: ‘../static/img/zhifibao_key.jpg‘, name: ‘Jessie‘}} text="This is comment text." date={new Date()}></Comment>,
    document.getElementById(‘root7‘)
);

这个组件接收author(对象)、text(字符串)、以及date(Date对象)作为props。是个复杂的组件。接下来我们提取拆分这个组件。

首先提取Avatar组件:

// 提取组件
function Avatar(props) {
    return (
        <img src={props.user.avatarUrl} alt={props.user.name} className="Avatar"/>
    );
}

function UserInfo(props) {
    return (
        <div className="UserInfo">
            <Avatar user={props.user}></Avatar>
            <div className="UserInfo-name">
                {props.user.name}
            </div>
        </div>
    );
}

// 最终Comment组件被简化为
function Comment2(props) {
    return (
        <div className="Comment">
            <UserInfo user={props.author}></UserInfo>
            <div className="Comment-text">
                {props.text}
            </div>
            <div className="Comment-date">
                {formatDate(props.date)}
            </div>
        </div>
    );
}

ReactDOM.render(
    <Comment2 author={{avatarUrl: ‘../static/img/zhifibao_key.jpg‘, name: ‘Xiaoyu Lee‘}} text="Wow, this is very beautiful." date={new Date()}></Comment2>,
    document.getElementById(‘root8‘)
);

5. Props的只读性

无论是使用函数或是类来声明一个组件,它决不能修改它自己的props。

The end...    Last updated by: Jehorn, Jan 07, 2018, 5:44 PM

原文地址:https://www.cnblogs.com/jehorn/p/8228923.html

时间: 2024-10-09 22:07:03

React学习笔记 - 组件&Props的相关文章

react学习笔记之组件生命周期

React 中的组件有三种状态: Mounted:已插入真实 DOM Updating:正在被重新渲染 Unmounted:已移出真实 DOM 它为每个状态都提供了两种处理函数: will:函数在进入状态之前调用, did: 函数在进入状态之后调用,三种状态共计五种处理函数. 所以,除了组件初始化时调用的getDefaultProps,getInitialState方法外,每个组件还有 componentWillMount,componentDidMount,componentWillUpdat

react学习笔记(一)

在开篇之前,先来说说选择react的初衷. 一个初学者,在开始选择深入了解一个框架之前,我查阅了一些资料,做出了对三大框架的一些基本分析. 1.数据流.Vue和Angular都是支持双向数据绑定,也就是在界面的操作能实时反映到数据,数据的变更能实时显示在界面上.Vue默认为单向数据绑定.React支持单向数据绑定,也就是说给定一个原始的页面,之后添加一些组件化操作,得到一个变化后的页面. 2.组件化.Vue和React都支持组件化.组件,即对一些数据和方法的封装,它可以用来构建用户页面,并通过任

React学习笔记-1-什么是react,react环境搭建以及第一个react实例

什么是react?react的官方网站:https://facebook.github.io/react/下图这个就是就是react的标志,非常巧合的是他和我们的github的编辑器Atom非常相似.react是Facebook官方推出的一个javascript的库,现在已经有了非常多的库和框架Facebook为什么还要开发一款新的框架呢?原因就是 Facebook遇到了一些新的问题.Facebook需要解决的问题是构建数据不断变化的大型应用.大型应用是什么意思?数据不断变化带来什么问题呢? 

React学习笔记(三) 组件传值

组件嵌套后,父组件怎么向子组件发送数据呢? 答案是: this.props <script type="text/babel"> var MyFirst = React.createClass({ getInitialState : function(){ return { myMessage: ['我是父组件data1','我是父组件data2','我是父组件data3',] } }, render : function(){ return ( <div> &

react学习笔记1之声明组件的两种方式

//定义组件有两种方式,函数和类 function Welcome(props) { return <h1>Hello, {props.name}</h1>; } class Welcome extends React.Component{ render(){ return <h1>Hello, {this.props.name}</h1>; } } ReactDOM.render( <Welcome name="kevin"/&g

react学习笔记1

# 1.hello world 学习一个语言,最好的方式,我们需要去官网去查看文档(https://facebook.github.io/react),通过JSFiddle,便可以看到最简单的demo.目前为止最新版本为15.3.0,后续没有特别说明,我们都是基于该版本. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title&g

react学习笔记4

<header class="site-header jumbotron"> <div class="container"> <div class="row"> <div class="col-xs-12"> <h1>欢迎来到妙味课堂</h1> <p class="lead">妙味课堂是一支独具特色的IT培训团队,妙味反对传

react学习笔记3

<div id="demo"></div> <script type="text/babel"> var ItemComponent = React.createClass({ render:function (){ return ( <li>{this.props.item}</li> ) } }); var ListComponent = React.createClass({ render:funct

React学习笔记---项目构建

简介 ReactJs由于有FB的支持,得到了社区的极大关注,同时由于ReactJs只希望专一的做好View层次上的工作,所以本身并没有涉及很多周边工具. 今天要介绍一款工具,同时包含一个构建项目模板的工具,对于初学者来说,就有了一个可以学习.开发.测试的平台. Yeoman 官方的介绍是这样形容的:“Web App的脚手架工具” --- Yeoman的目的是帮助用户更好的启动项目,提供最好的实践和工具使用户保持高生产率. Yeoman提供了一个生成器的生态系统,并提供了一个“Yeoman的工作流