1.写组件时,最好将一个大的组件分解成多个小的组件。

  通过React写组件时,应当尽可能地将组件分为更小的更多的组件,然后再复合组件。

  比如下面的评论组件就是一个组件,一个庞大的组件,这时我们还没有将之分解,更没有复合: 

function Comment(props) {
return (
<div className="Comment">
<div className="UserInfo">
<img className="Avatar"
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>
);
}

  这个组件要接受一个author(对象)、一个text(字符串)和一个data(data对象)作为props。

  因为这样的复杂嵌套关系导致如果我们需要修改这个组件变得非常棘手,并且在这种情况下,我们很难能够重用其中的小的组件,因此,这时候我们就需要将这个大的组件分解为几个小的组件,这样对于大的app,我们的工作就会变得越来越容易。

  我们将之分解如下:

  

function formatDate(date) {
return date.toLocaleDateString();
} function Avatar(props) {
return (
<img className="Avatar"
src={props.user.avatarUrl}
alt={props.user.name} />
);
} function UserInfo(props) {
return (
<div className="UserInfo">
<Avatar user={props.user} />
<div className="UserInfo-name">
{props.user.name}
</div>
</div>
);
} function Comment(props) {
return (
<div className="Comment">
<UserInfo user={props.author} />
<div className="Comment-text">
{props.text}
</div>
<div className="Comment-date">
{formatDate(props.date)}
</div>
</div>
);
} const comment = {
date: new Date(),
text: 'I hope you enjoy learning React!',
author: {
name: 'Hello Kitty',
avatarUrl: 'http://placekitten.com/g/64/64'
}
};
ReactDOM.render(
<Comment
date={comment.date}
text={comment.text}
author={comment.author} />,
document.getElementById('root')
);

  这样,我们就把一个大的组件分解成了几个小的组件并且组合起来,这样更有利于代码的重用以及后期的维护。

2. 组件的props是只读的。

  当我们使用函数的方法定义一个组件的时候,我们是不能修改它的 props的。

  看下面这个函数:

function sum(a, b) {
return a + b;
}

  这种类型的函数我们称为“pure”, 因为它没有尝试着去改变它的Input,并且对于同样的输入总是返回同样的结果。

  对比之下,下面的这种函数就是"impure"的,因为它改变了自己的输入:

function withdraw(account, amount) {
account.total -= amount;
}

  React是非常灵活的,但是它有自己严格的规则;
  所有的React组件关于它们的props都必须表现得像 “pure” 函数。

3.修改组件的state

  虽然说props是只读的,但是state却是可以修改的,可也不能随意修改,如下就是错的方式: 

// Wrong
this.state.comment = 'Hello';

  相反,我们需要使用setState(),如下所示:

// Correct
this.setState({comment: 'Hello'});

  并且如果我们使用es6的class创建组件,设置state初始值的唯一方式就是在constructor中设置(具体可以在mdn中学习es6)。

React 的几个需要注意的地方的更多相关文章

  1. React和vue的差异和相似地方

    React 单向绑定(加插件后,还是可以双向绑定) Vue 双向绑定 组件化 1. React,需要编写render函数, 2. 当React状态的状态state改变是render就会重新被调用, 重 ...

  2. React不同版本之间需要注意的地方

    React Fiber react fiber指的是react16.0机器之后的版本,相对于之前的版本来说,这一个版本的更新做了很多的优化,所以和之前的版本中的用法可能会发生不同,所以,平常开发中,主 ...

  3. Vue.js 2.0 和 React、Augular等其他框架的全方位对比

    引言 这个页面无疑是最难编写的,但也是非常重要的.或许你遇到了一些问题并且先前用其他的框架解决了.来这里的目的是看看Vue是否有更好的解决方案.那么你就来对了. 客观来说,作为核心团队成员,显然我们会 ...

  4. 初探React,将我们的View标签化

    前言 我之前喜欢玩一款游戏:全民飞机大战,而且有点痴迷其中,如果你想站在游戏的第一阶梯,便需要不断的练技术练装备,但是腾讯的游戏一般而言是有点恶心的,他会不断的出新飞机.新装备.新宠物,所以,很多时候 ...

  5. 入门React和Webpack

    最近在学习React.js,之前都是直接用最原生的方式去写React代码,发现组织起来特别麻烦,之前听人说用Webpack组织React组件得心应手,就花了点时间学习了一下,收获颇丰 说说React ...

  6. 轻松入门React和Webpack

    最近在学习React.js,之前都是直接用最原生的方式去写React代码,发现组织起来特别麻烦,之前听人说用Webpack组织React组件得心应手,就花了点时间学习了一下,收获颇丰 <!-- ...

  7. Facebook React完全解析

    2004年,对于前端社区来说,是里程碑式的一年.Gmail横空出世,它带来基于前端渲染的原生应用级别的体验,相对于之前的服务端渲染网页可谓提升了一个时代,触动了用户的G点.自此,前端渲染的网站成为无数 ...

  8. Vue.js 2.0 和 React、Augular

    Vue.js 2.0 和 React.Augular 引言 这个页面无疑是最难编写的,但也是非常重要的.或许你遇到了一些问题并且先前用其他的框架解决了.来这里的目的是看看Vue是否有更好的解决方案.那 ...

  9. 探索React生态圈

    原文地址:http://www.csdn.net/article/2015-08-04/2825370-react 2004年,对于前端社区来说,是里程碑式的一年.Gmail横空出世,它带来基于前端渲 ...

随机推荐

  1. 一条java开发工程师的升级路线,从初级到无语言障碍

    看了一篇文章,讲述的是如何进行后端开发升级,现在分享下,我的总结,感谢写文章的作者大大,觉得他很会坚持,虽然一直在骂人,但是,我觉得人最大的敌人就是懒惰,所以骂得好 现在写下我的总结,希望对有志者有帮 ...

  2. [label][Google-Developers] Your First Multi Screen Site

    内容是任何网站最重要的部分. 所以,让我们为内容而设计,而不要让设计支配内容. 1. 首先确定我们需要的内容: 2. 基于这个内容,为无论宽.窄的 viewport 创建一个页面结构: 3. 然后在简 ...

  3. ASP.NET Core2使用Autofac实现IOC依赖注入竟然能如此的优雅简便

    初识ASP.NET Core的小伙伴一定会发现,其几乎所有的项目依赖都是通过依赖注入方式进行链式串通的.这是因为其使用了依赖注入 (DI) 的软件设计模式,代码的设计是遵循着“高内聚.低耦合”的原则, ...

  4. onenote无法更新,提示无法流式传输、无法登陆等问题解答

    onenote无法更新,提示无法流式传输 修改DNS 4.2.2.1 和 4.2.2.2 onenote反复提示登录 升级到IE11

  5. Bootstrap模态框modal的高度和宽度设置

    (1)高度 将style=“height:900px”放在<div class = "modal-dialog">或者更外层上,整个模态框的高度不会发生变化 如下图所示 ...

  6. angular 程序架构

  7. CSS content应用

    一.简介 content属性早在 CSS2.1的时候就被引入了,可以使用:before以及:after伪元素生成内容.此特性目前已被大部分的浏览器支持:(Firefox 1.5+, Safari 3. ...

  8. asp.net——XML格式导出Excel

    下面介绍一种导出Excel的方法: 此方法不需要在服务器上安装Excel,采用生成xml以excel方式输出到客户端,可能需要客户机安装excel,所以也不会有乱七八糟的权限设定,和莫名其妙的版本问题 ...

  9. 搭建 .NET Core 开发环境

    安装 .Net Core 执行代码 任务时间:时间未知 .NET Core 的官方文档很详细,本实验带你建立一个.NET Core 1.1的Web运行环境,更多内容可以可以查阅微软官方文档. 安装 . ...

  10. Kafka与.net core(一)安装

    1.安装JDK 目前官网不能直接下载,在网上找到1.8.0版本安装包下载到本地. 1.1.下载jdk并解压 [root@iz2zei2y693gtrgwlibzlwz java]# ls jdk1.. ...