react-in-patterns

说明:react in patterns这个系列是我翻译过来的一些文章。原书的地址在: react-in-patterns 是一本很不错的书。

本指南是针对已经对React的基本理念和他的工作原理比较了解的开发人员。这并不是一个完整的操作指南,而是作为对流行概念设计模式的介绍。社区引入或多或少的范式。它指向你一个抽象思维。例如,它没有谈论Flux,而是谈论数据流。没有谈及高级组件,而是谈论组合。

基础知识

通讯

每个react组件应该像一个独立运行的小型系统。它有自己的状态,输入和输出。
[图片上传失败...(image-ec7401-1524960539084)]

输入

react组件的输入是它的props。

//title.jsx
const Title = (props) => {
    return <h1>{props.text}</h1>
}

Title.propTypes = {
    text: PropTypes.string
};

Title.defaultProps = {
    text: 'hello word'
};

//app.jsx

const App = () => {
    return <Title text='Hello React' />
}

Title组件仅仅只有一个props输入,它的父组件App应该在使用Title组件是为它提供这个输入。我们也提供了propTypes去定义每个属性类型,react会在控制台为我们打印那些属性传入的是不合法的。当然使用defaultProps是一个比较好的选择。我们可以用它来设置组件的默认值。这样开发人员如果忘记传入某些属性,也能正常的显示了。react并没有严格定义传入的属性的具体内容,它可能是组将的另一个组成部分。

const SomethingElse = ({answer}) => {
    return <div>答案是:{answer}</div>
}

const Answer = () => {
    return <span>42</span>
}

<SomethingElse answer={<Answer />} />

react 为我们提供了一个props.children属性让我们可以访问组件所有的子组件

const Title = ({text, children}) => {
    return(
        <h1>
            {text}
            {children}
        </h1>
    );
}

const App = () => {
    return(
        <Title text='Hello React'>
            <span>community</span>
        </Title>
    );
}

在这个例子中<span>community</span>,是作为Title的children传入到Title组件中去的。

输出

react组件的第一个明显的输出是呈现的HTML。在视觉上,这就是我们得到的。

const NameField = ({valueUpdated}) => {
    return(
        <input onChange={event => valueUpdated(e.target.value)}/>
    );
}

class App extends React.Component {
    constructor(props) {
        super(props);
        
        this.state = {name: ''}
    }
    
    render() {
        return(
            <div>
                <NameField valueUpdated = {name => this.setState({name})} />
            </div>
        );
    }
    
}

最后的想法

把react组将视为一个黑盒子是很令人兴奋的,它有自己的输入,生命周期和输出。由我们来组成这些盒子。这也许是react提供的优势之一。易于抽象和撰写。

个人的一些看法

我们可以把每个组件看成是无状态的函数,传入相同的props我们能得到相同的component,然后在通过view组合这些componet,这样我们就能将状态放在view层统一管理。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352

推荐阅读更多精彩内容

  • 以下内容是我在学习和研究React时,对React的特性、重点和注意事项的提取、精练和总结,可以做为React特性...
    科研者阅读 8,227评论 2 21
  • 现在最热门的前端框架,毫无疑问是 React 。上周,基于 React 的 React Native 发布,结果一...
    sakura_L阅读 425评论 0 0
  • 使用 create-react-app 快速构建 React 开发环境 项目的目录结构如下: React JSX ...
    majun00阅读 507评论 0 0
  • Sige四哥阅读 89评论 0 0
  • 本次课主要进行了测试题前两的文章的精细评讲;韵歌中国学知识讲解以及李白《塞下曲》的引导诵读。测试情况表明,孩子对于...
    认真对待每一节课阅读 161评论 0 0