From 34716990288f574c55512bf89eac4702844a786d Mon Sep 17 00:00:00 2001 From: BoyuZhou <386607913@qq.com> Date: Tue, 22 Aug 2017 14:41:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=BB=84=E4=BB=B6=E5=88=92?= =?UTF-8?q?=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/misc.xml | 38 +++ .idea/modules.xml | 8 + .idea/react-components-docs.iml | 12 + .idea/vcs.xml | 6 + .idea/workspace.xml | 378 +++++++++++++++++++++++++ react编码规范.md | 22 +- 如何写一个标准的react组件.md | 12 + 组件划分原则.md | 121 ++++++++ 8 files changed, 591 insertions(+), 6 deletions(-) create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/react-components-docs.iml create mode 100644 .idea/vcs.xml create mode 100644 .idea/workspace.xml create mode 100644 组件划分原则.md diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..3cf9024 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,38 @@ + + + + + + true + + false + true + + + + + + + + + + CSS + + + Code quality toolsCSS + + + GeneralJavaScript + + + JavaScript + + + Node.jsJavaScript + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..59b6d2d --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/react-components-docs.iml b/.idea/react-components-docs.iml new file mode 100644 index 0000000..24643cc --- /dev/null +++ b/.idea/react-components-docs.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..64ab556 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,378 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + true + DEFINITION_ORDER + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + project + + + + + + + + + + + + + + + + project + + + true + + + + DIRECTORY + + false + + + + + + + + + 1502951840899 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/react编码规范.md b/react编码规范.md index e901c11..9242a5b 100644 --- a/react编码规范.md +++ b/react编码规范.md @@ -184,17 +184,27 @@ export default Button; ### 常用npm包 -##### keyCode +##### [keyCode](https://github.com/timoxley/keycode) -##### warning -##### bee-animate +##### [warning](https://github.com/BerkeleyTrue/warning) -##### bee-transition +``` +var warning = require('warning'); -##### bee-overlay +var ShouldBeTrue = false; -##### dom-helpers (3.0.0) +warning( + ShouldBeTrue, + 'This thing should be true but you set to false. No soup for you!' +); +``` + +##### [bee-animate](https://github.com/tinper-bee/bee-animate) + +##### [bee-overlay](https://github.com/tinper-bee/bee-overlay) + +##### [dom-helpers (3.0.0)](https://github.com/react-bootstrap/dom-helpers) 参考链接 diff --git a/如何写一个标准的react组件.md b/如何写一个标准的react组件.md index 6338c76..f916d2b 100644 --- a/如何写一个标准的react组件.md +++ b/如何写一个标准的react组件.md @@ -6,6 +6,16 @@ ### 一、下载tinper-bee开发工具 #### 1、全局安装开发工具 + +如果是用友内部员工,请使用用友内部npm镜像和下载工具ynpm-tool。 + +``` +npm install -g ynpm-tool +ynpm install +``` + +也可以使用npm。 + ``` npm install -g bee-tools ``` @@ -27,6 +37,8 @@ cnpm install -g bee-tools npm --registry https://registry.npm.taobao.org install -g bee-tools ``` + + #### 2、生成组件脚手架 下面以创建button组件为例 diff --git a/组件划分原则.md b/组件划分原则.md new file mode 100644 index 0000000..a1bbaa9 --- /dev/null +++ b/组件划分原则.md @@ -0,0 +1,121 @@ +# 组件划分原则 + +### 一、单一原则 + +一个组件只做一件事。 +遵循单一原则可以让我们的组件逻辑更简单,职责更明确,复用性更好。 +拆分单一原则组件也更方便我们将无状态组件改写成函数组件,来优化react性能。 + +``` +//bad +class Panel extends Component{ + render() { + return ( +
+
+ +
+
+ +
+
+ +
+
+ ) + } +} + +//good +function PanelHeader(props) { + return ( +
+ +
+ ) +} + +function PanelBody(props) { + return ( +
+ +
+ ) +} + +function PanelHFooter(props) { + return ( +
+ +
+ ) +} + +class Panel extends Component{ + render() { + return ( +
+ + + +
+ ) + } +} + +``` + +### 二、通用原则 + +我们的基础组件,只包含业务中最常用的功能和适用性最广的DOM结构。 + +### 三、可扩展原则 + +组件提供最灵活的扩展性。 +- 每一个提供样式的DOM结构都允许用户传入class和style来修改样式。 +- 每一个UI展示部分都提供接口允许用户替换。组件只封装交互逻辑和提供默认的组件内容。 +- 对于封装逻辑的组件可以允许用户传入展示部分组件。 +- 逻辑组件允许用户扩展包裹的dom元素,即允许用户传入component(props, react元素或dom元素的字符串) +来替换我们默认包裹的dom元素。 + + +- 样式扩展 +``` +class Example extends Component{ + render() { + let {className, style} = this.props; + + return ( +
+ +
+ ) + } +} +``` + +- 组件内容扩展 + +``` +//默认给定一个图标 +let defaultProps = { + closeIcon: +} +class Tile extends Component{ + + render() { + //允许用户传入自定义的图标或按钮 + let { closeIcon } = this.props; + let + return ( +
+ { React.cloneElement(closeIcon, { className: "close-btn", onClick: this.close }) } + ... +
+ ) + } +} +Tile.defaultProps = defaultProps; +``` + +