Our GCC is a project developed by React that makes it painless to create interactive UIs. Design simple views for each state in your application, and React will update and render just the right components when your data changes.And there is a picture that we can understand React better:

Today, we will show you all middleware in GCC and describing some important middleware:

Middleware in GCC
Intention
react-dom              

The react-dom package provides DOM-specific methods that can be used at the top level of your app.

we can use it like as:

import ReactDOM from 'react-dom';
ReactDOM.render(
<h1>Hello world</h1>
, document.getElementById('app'));
prop-types

The role of the library is to react with proptypes type detection. As the name suggests prop-types is the react component props object in the type of detection, because props is the flow of data flow pipeline, we can easily monitor the prop-types in most of the variables in the variable type.propTypes can be used to detect all data types of variables, including the basic type of string, boolean, number, and the reference type of object, array, function, and even ES6 new symbol type, such as:

import PropTypes from 'prop-types';
yourComponent.propTypes = {
prop1: PropTypes.object,
prop2: PropTypes.func,
prop3: PropTypes.array,
prop1: PropTypes.bool,
prop2: PropTypes.string,
prop3: PropTypes.number,
};

In addition, we can use 3 method to do more detaction:

  1. oneOfType: to receive parameters is an array, the array element is the type of data you want to detect, such as:

    yourComponent.propTypes = {
    prop1:PropTypes.oneOfType(
    [PropTypes.string,PropTypes.number]
    )
  2. oneOf: to receive parameters is an array, the array element is the value of the variable you want to pass, such as:

    yourComponent.propTypes = {
    prop1:PropTypes.oneOf(
    [12,13]
    )
    }
  3. arrayOf, objectOf: arrayOf receives a parameter, which is the data type of the specified array element. The objectOf received parameter is the data type of the attribute
  4. shape: The shape method is better than arrayOf and objectOf because the data types of arrayOf and objectOf are forcibly specified, but usually there should be a number of different types of attributes in an object, which is what the shape is to do, such as:
    yourComponent.propTypes = {
    prop1: PropTypes.shape({
    prop1_1: PropTypes.func,
    prop1_2: PropTypes.bool,
    prop1_3: PropTypes.string,
    }),
    }

    More Details

redux

React is just an abstract layer of the DOM, not a complete solution for Web applications. When we use React to build large applications, the communication between components becomes cumbersome. Redux is to solve this problem.Redux design is very simple, two sentences.

  1. Web application is a state machine, the view and the state is one to one correspondence.
  2. all the state, stored in an object inside.

Store is where to save the data, you can think of it as a container. The entire application can only have one Store.
Redux provides createStore this function, used to generate Store, such as:

import { createStore } from 'redux';
const store = createStore(fn);

And Store provide 3 methods:

  1. store.getState() – Get a snapshot of the current time Store.
  2. store.dispatch() – Send a atcion to tell Store to deal with.
  3. store.subscribe() – Store allows you to set the listening function using the store.subscribe method, which is executed automatically once State has changed.

The following is a simple createStore implementation, we can better understand the Store:

const createStore = (reducer) => {
let state;
let listeners = []; const getState = () => state; const dispatch = (action) => {
state = reducer(state, action);
listeners.forEach(listener => listener());
}; const subscribe = (listener) => {
listeners.push(listener);
return () => {
listeners = listeners.filter(l => l !== listener);
}
}; dispatch({}); return { getState, dispatch, subscribe };
};

Another, Redux provide a method of combineReducers for Reducer's split. You just define the child Reducer functions, and then use this method to combine them into a large Reducer.

More Details

react-redux

The react-redux component is actually redux the author's custom library for the reactor and react-redux divides all components into two categories: UI components and container components.In short, the UI component is responsible for the rendering of the UI, and the container component is responsible for managing the data and logic.

React-Redux provides a connect method for generating container components from UI components, such as:

import { connect } from 'react-redux'

const containerComponent = connect(
mapStateToProps,
mapDispatchToProps
)(UIComponent)

In the above code,

  1. mapStateToProps is a function. It is the role of its name as it is, from the (external) state object (UI component) props object mapping;
  2. mapDispatchToProps is the second argument to the connect function that is used to create a mapping of the UI component's parameters to the store.dispatch method. In other words, it defines which users should operate as Action, pass to the Store. It can be a function or an object.

Source Code

redux-form

redux-form works with React Redux to enable an html form in React to use Redux to store all of its state.

The diagram below represents the simplified data flow:

Note: redux-form has been completely rewritten for v6, because of a fundamental design change.

More Details

classnames

A simple JavaScript utility for conditionally joining classNames together.

In React, one of its primary use cases is to make dynamic and conditional className props simpler to work with (especially more so than conditional string manipulation). So where you may have the following code to generate a classNameprop for a <button> in React:

var Button = React.createClass({
// ...
render () {
var btnClass = 'btn';
if (this.state.isPressed) btnClass += ' btn-pressed';
else if (this.state.isHovered) btnClass += ' btn-over';
return <button className={btnClass}>{this.props.label}</button>;
}
});

You can express the conditional classes more simply as an object:

var classNames = require('classnames');

var Button = React.createClass({
// ...
render () {
var btnClass = classNames({
btn: true,
'btn-pressed': this.state.isPressed,
'btn-over': !this.state.isPressed && this.state.isHovered
});
return <button className={btnClass}>{this.props.label}</button>;
}
});

More Details

Other small middle-ware

react-select、react-tabs、d3

React

middlewares in GCC的更多相关文章

  1. VSCode调试go语言出现:exec: "gcc": executable file not found in %PATH%

    1.问题描述 由于安装VS15 Preview 5,搞的系统由重新安装一次:在用vscdoe编译go语言时,出现以下问题: # odbcexec: "gcc": executabl ...

  2. GCC学习(1)之MinGW使用

    GCC学习(1)之MinGW使用 因为后续打算分享一些有关GCC的使用心得的文章,就把此篇当作一个小预热,依此来了解下使用GNU工具链(gcc.gdb.make等)在脱离IDE的情况下如何开发以及涉及 ...

  3. 使用 GCC 和 GNU Binutils 编写能在 x86 实模式运行的 16 位代码

    不可否认,这次的标题有点长.之所以把标题写得这么详细,主要是为了搜索引擎能够准确地把确实需要了解 GCC 生成 16 位实模式代码方法的朋友带到我的博客.先说一下背景,编写能在 x86 实模式下运行的 ...

  4. [异常解决] How to build a gcc toolchain for nRF51 on linux (very detailed!!!)

    1.Install gcc-arm-none-eabi https://devzone.nordicsemi.com/tutorials/7/This link shows that developm ...

  5. CentOS 6.6 升级GCC G++ (当前最新版本为v6.1.0) (完整)

    ---恢复内容开始--- CentOS 6.6 升级GCC G++ (当前最新GCC/G++版本为v6.1.0) 没有便捷方式, yum update....   yum install 或者 添加y ...

  6. GCC 预处理、编译、汇编、链接..

    1简介 GCC 的意思也只是 GNU C Compiler 而已.经过了这么多年的发展,GCC 已经不仅仅能支持 C 语言:它现在还支持 Ada 语言.C++ 语言.Java 语言.Objective ...

  7. 用gcc进行程序的编译

    在Linux系统上,一个档案能不能被执行看的是有没有可执行的那个权限(x),不过,Linux系统上真正认识的可执行文件其实是二进制文件(binary program),例如/usr/bin/passw ...

  8. gcc/linux内核中likely、unlikely和__attribute__(section(""))属性

    查看linux内核源码,你会发现有很多if (likely(""))...及if (unlikely(""))...语句,这些语句其实是编译器的一种优化方式,具 ...

  9. Ubuntu 14.04 LTS 下升级 gcc 到 gcc-4.9、gcc-5 版本

    如果没记错的话,阿里云ECS上的Ubuntu也是LTS版本. 如果还在使用较旧版本的Ubuntu,或者是Ubuntu LTS,那么我们是很难体验新版gcc的.怎么办呢? 我们或许可以自己去编译用旧版本 ...

随机推荐

  1. Mysql 协议嗅探

    需求 监听通过网卡的所有mysql流量,进行解析,可在不影响现有业务情况下,进行入侵检测(IDS)或数据集成 协议要点 起初发现 用mysql-front访问数据库和mysql 的客户端访问时数据包格 ...

  2. 三大开源运维监控工具zabbix、nagios、open-falcon优缺点比较

    借鉴一下别人的,自己做个记录,我觉得推荐还是使用open-falcon,最重要的一点是有完善的中文帮助文档. 帮助文档地址:https://book.open-falcon.org/zh/index. ...

  3. 实现mysql在windows server 2008下自动备份

    环境:MySQL   安装位置:D:\MySQL论坛数据库名称为:Db_Test数据库备份目的地:D:\db_bak\ 1.首先新建一个bat文件 rem ********************** ...

  4. Hibernate 学习笔记 - 1

    一.Hibernate 的环境搭建.配置及 HelloWorld 1.在 Eclipse 中搭建 Hibernate 环境 下载 Hibernate 离线 jar 包(jbosstools-4.4.4 ...

  5. 关于KVO导读

    入门篇 KVO是什么? Key-value observing is a mechanism that allows objects to be notified of changes to spec ...

  6. PHP windowns安装扩展包

    1.  php_msgpack.dll php.ini 添加  extension=php_msgpack.dll 下载dll: http://pecl.php.net/package/msgpack ...

  7. 数据挖掘 ID3

    本文讲的是数据挖掘中的ID3,这个有很多人做了,我也没有说什么改善,只是要考试,用我考试记录的来写,具有很大主观性,如果看到有觉得不对或感觉不好,请关掉浏览器或和我说,请不要生气或发不良的言论. 决策 ...

  8. 解析 .Net Core 注入 (2) 创建容器

    在上一节的学习中,我们已经知道了通过 IServiceCollection 拓展方法创建 IServiceProvider 默认的是一个类型为 ServiceProvider 对象,并且实际提供创建对 ...

  9. python中sys.exit()和os._exit(0)退出程序

    python中退出程序的两种方法,0为默认状态,可以为空,两者均会退出当前运行的程序,os._exit(0)中的0不能省略 sys.exit(0):可以捕获SystemExit异常,然后做相应的清理工 ...

  10. 《剑指Offer》面试题5-替换空格

    题目:请实现一个函数,把字符串中的每个空格替换成"%20".例如输入"We are happy.",则输出"We%20are%20happy.&quo ...