React技巧1(状态组件与无状态组件的使用)

本教程总共5篇,每日更新一篇,请关注我们!你可以进入历史消息查看以往文章,也敬请期待我们的新文章!

1.React 技巧1(状态组件与无状态组件的使用) ----2018.01.04

2.React 技巧2(避免无意义的父节点)----2018.01.05

3.React 技巧3(如何优雅的渲染一个List)----2018.01.06

4.React 技巧4(如何处理List里面的Item)----2018.01.07

5.React 技巧5(TodoList实现)----2018.01.08

开发环境:Windows 8,node v8.9.1,npm 5.5.1,WebStorm 2017.2.2

我们开发的时候或许会遇到这样的问题?

什么是React状态组件和无状态组件?

什么时候使用React状态组件?

什么时候使用React无状态组件?

我在刚学习的时候,就比较傻,不管什么情况都使用状态组件,这样当然也行,也不会出错!但是作为一名有责任心的程序猿,虽然外表屌丝,但内心还是很极客的!那我们如何优雅的书写React组件呢?

React状态组件?

顾名思义该组件有状态,有状态就有对应的UI 变化!

如果你的UI 不需要变化,请不要使用 状态组件!

如下就是典型的官方提供的一个状态组件

因为这是一个计数器,他是不断增长变化的,只要UI变化,那么就需要用到状态组件!

React无状态组件?

那么什么时候用无状态组件呢?

就是组件本身不需要负责UI变化,不包括子组件

回过头看我们之前的Index.jsx,和Shop.jsx

可能新手一开始,困难的地方就是在于如何规划组件,怎么写?

这就需要你多写,慢慢去理解!送大家一句话,再React里:万物皆组件!

只要你的代码,相同的地方出现两次,我觉得你就要考虑把他做成组件,因为这样做不但好维护,也节省代码量!

如果遇到这种情况,如何组织

有三段一样的代码?

按照设计原则,我们需要把他做成组件!

我们可以这样做,但这样做不是最好的!我们改造下!

我们新建 SecondsBottom.jsx 无状态组件

import React from 'react';

const SecondsBottom = ({seconds}) =>
    <div className="bottom">
        Seconds: {seconds}
    </div>
;

export default SecondsBottom;

修改 Seconds.jsx 写法

render() {
    let state = this.state;
    return (
        <div className="cont">
            <div className="top">
                <i className="bd_logo1"/>
                这是{this.props.title}
            </div>
            {/*这里我写了三中传值方法*/}
            <SecondsBottom seconds={this.state.seconds}/>
            <SecondsBottom seconds={state.seconds}/>
            <SecondsBottom {...state}/>
        </div>
    );
}

如果你需要在无状态组件里写一些逻辑判断呢?

比如:seconds小于等于5 显示一种样式,大于5 又显示另一种样式

import React from 'react';

const SecondsBottom = ({seconds}) => {
    if (seconds < 5) {
        return (
            <div className="bottom">
                小于5的Seconds: {seconds}
            </div>
        )
    } else {
        return (
            <div className="bottom">
                大于5的Seconds: {seconds}
            </div>
        )
    }
};

export default SecondsBottom;

当然你页可以用三元表达式来写!

import React from 'react';

const SecondsBottom = ({seconds}) =>
    <div className="bottom">
        {seconds <= 5 ? "小于等于5的" : " 大于5"}的Seconds: {seconds}
    </div>
;
export default SecondsBottom;

最终效果!!!!

原文发布于微信公众号 - 前端人人(frontend_everyone)

原文发表时间:2018-01-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏软件开发

CSS3与页面布局学习总结(五)——Web Font与Sprite

一、web font web font是应用在web中的一种字体技术,在CSS中使用font-face定义新的字体。先了解操作系统中的字体: a)、安装好操作系...

3486
来自专栏向治洪

ConstraintLayout约束控件详解

简介 在Google IO大会中不仅仅带来了Android Studio 2.2预览版,同时带给我们一个依赖约束控件–ConstraintLayout。一种构建...

3075
来自专栏AndroidTv

前端入门1-基础概念声明正文

作为一个前端小白,入门跟着这四个来源学习,感谢作者的分享,在其基础上,通过自己的理解,梳理出的知识点,或许有遗漏,或许有些理解是错误的,如有发现,欢迎指点下。

912
来自专栏java一日一条

前端高性能滚动 scroll 及页面渲染优化

最近在研究页面渲染及web动画的性能问题,以及拜读《CSS SECRET》(CSS揭秘)这本大作。

3273
来自专栏王磊的博客

react native android6+拍照闪退或重启的解决方案

前言 android 6+权限使用的时候需要动态申请,那么在使用rn的时候要怎么处理拍照权限问题呢?本文提供的是一揽子rn操作相册、拍照的解决方案,请看正文...

3639
来自专栏腾讯社交用户体验设计

[ISUX译]iOS 9人机界面指南(四):UI元素(上) - 腾讯ISUX

2055
来自专栏知晓程序

开发 | 一篇文章读懂微信小程序视图层

1302
来自专栏软件开发

CSS3与页面布局学习总结(四)——页面布局大全

一、负边距与浮动布局 1.1、负边距 所谓的负边距就是margin取负值的情况,如margin:-100px,margin:-100%。当一个元素与另一个元素m...

1.1K6
来自专栏知晓程序

开发 | 小程序也能像朋友圈一样「折叠全文」?有了这个技巧就能做!

之前做小程序开发时,需要实现对多行文本进行的折叠的效果(类型微信朋友圈)。主要交互有三点:

1805
来自专栏Google Dart

AngularDart Material Design 单选按钮 顶

具有材料风格的单选按钮。 通常与material-radio-group一起使用。 选中后,无法通过用户操作取消选中相同的单选按钮。

1422

扫码关注云+社区

领取腾讯云代金券