Skip to content

Commit

Permalink
Update 2018 9.6
Browse files Browse the repository at this point in the history
  • Loading branch information
chinanf-boy committed Sep 6, 2018
1 parent 4e09a2b commit 1ef5749
Show file tree
Hide file tree
Showing 6 changed files with 595 additions and 227 deletions.
2 changes: 1 addition & 1 deletion 2.JSX.md
Original file line number Diff line number Diff line change
Expand Up @@ -133,4 +133,4 @@ function createTextElement(value) {

---

在下一篇文章中,[Didact: Instances, reconciliation and virtual DOM](https://engineering.hexacta.com/didact-instances-reconciliation-and-virtual-dom-9316d650f1d0) |-|_|🌟| [我们介绍了Didact的虚拟DOM和协调算法以支持DOM更新](#3-%E5%AE%9E%E4%BE%8B-%E5%AF%B9%E6%AF%94%E5%92%8C%E8%99%9A%E6%8B%9Fdom)
在下一篇文章中,[Didact: Instances, reconciliation and virtual DOM](https://engineering.hexacta.com/didact-instances-reconciliation-and-virtual-dom-9316d650f1d0) |-|_|🌟| [我们介绍了Didact的虚拟DOM和对比算法以支持DOM更新](#3-%E5%AE%9E%E4%BE%8B-%E5%AF%B9%E6%AF%94%E5%92%8C%E8%99%9A%E6%8B%9Fdom)
12 changes: 6 additions & 6 deletions 3.Virtual.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,11 +96,11 @@ function render(element, parentDom) {

> 请注意,我们在这里引用的实例与[Dan Abramov在React Components,Elements和Instances中使用的实例](https://medium.com/@dan_abramov/react-components-elements-and-instances-90800811f8ca)不同。他引用了`公共实例`,这是React在调用继承自类的构造函数时得到的`React.Component`。我们将在未来的帖子中将`公开实例`添加到`Didact`
每个DOM节点都会有一个匹配的实例。协调算法的一个目标是尽可能避免-创建或删除实例。创建和删除实例意味着我们也将-修改DOM树,所以我们重新利用实例的`次数越多`,修改DOM树的`次数越少`
每个DOM节点都会有一个匹配的实例。对比算法的一个目标是尽可能避免-创建或删除实例。创建和删除实例意味着我们也将-修改DOM树,所以我们重新利用实例的`次数越多`,修改DOM树的`次数越少`

### 3.3 重构

让我们重写我们的`render`函数,保持同样的协调算法,并添加一个`instantiate`函数来`创建`一个给定元素的-实例(及其子元素):
让我们重写我们的`render`函数,保持同样的对比算法,并添加一个`instantiate`函数来`创建`一个给定元素的-实例(及其子元素):

``` js
// --------------- 运行一次 开始------
Expand Down Expand Up @@ -241,7 +241,7 @@ function updateDomProperties(dom, prevProps, nextProps) {

### 3.4 重用DOM节点

我们说-协调算法-需要尽可能多地重用-DOM节点。让我们为该·reconcile·函数添加一个验证,以检查之前渲染的元素`type`是否与我们当前正在渲染的元素相同。如果`type`相同,我们将重新使用它(更新属性以匹配新的属性):
我们说-对比算法-需要尽可能多地重用-DOM节点。让我们为该·reconcile·函数添加一个验证,以检查之前渲染的元素`type`是否与我们当前正在渲染的元素相同。如果`type`相同,我们将重新使用它(更新属性以匹配新的属性):

``` js
function reconcile(parentDom, instance, element) {
Expand All @@ -267,9 +267,9 @@ function reconcile(parentDom, instance, element) {
}
```

### 3.5 child-协调
### 3.5 child-对比

`reconcile`功能缺少一个关键步骤,它使`children`不受影响。`child-协调``React`的一个关键方面,它需要元素`(key)`中的额外属性来匹配-先前和当前树中的`child`。我们将使用这种算法的简易版本,它只比较-`children-数组`中相同位置的孩子。这种方法的成本是,我们失去了-重用DOM节点的机会,当他们改变渲染之间的子数组的`顺序`时。
`reconcile`功能缺少一个关键步骤,它使`children`不受影响。`child-对比``React`的一个关键方面,它需要元素`(key)`中的额外属性来匹配-先前和当前树中的`child`。我们将使用这种算法的简易版本,它只比较-`children-数组`中相同位置的孩子。这种方法的成本是,我们失去了-重用DOM节点的机会,当他们改变渲染之间的子数组的`顺序`时。

为了实现这一点,我们将先前的子实例instance.childInstances与子元素进行匹配element.props.children,然后reconcile逐个调用。我们还保留所有返回的实例,reconcile以便我们可以更新childInstances:

Expand Down Expand Up @@ -378,7 +378,7 @@ function reconcileChildren(instance, element) {

> [>>> codepen.io](https://codepen.io/pomber/pen/WjLqYW?editors=0010)
当我们调用`render树`的根时,`-协调-`适用于整棵树。在接下来的文章中,我们将介绍`组件{Component}`这将使我们能够协调算法适用于只是受影响的子树
当我们调用`render树`的根时,`-对比-`适用于整棵树。在接下来的文章中,我们将介绍`组件{Component}`这将使我们能够对比算法适用于只是受影响的子树

在GitHub上检查[这 三个 提交](https://github.com/hexacta/didact/commit/6f5fdb7331ed77ba497fa5917d920eafe1f4c8dc),以查看代码如何从前一篇文章中更改。

Expand Down
4 changes: 2 additions & 2 deletions 4.Components-and-State.md
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ function instantiate(element) {

唯一缺少的是处理组件实例对帐,因此我们会在对帐算法中再添加一个案例。

鉴于`组件实例`只能有一个孩子,我们不需要处理`children-协调`,我们只需更新`props`公共实例,重新呈现孩子并协调它
鉴于`组件实例`只能有一个孩子,我们不需要处理`children-对比`,我们只需更新`props`公共实例,重新呈现孩子并对比它

``` js
// 对比-元素 并 更新 html
Expand Down Expand Up @@ -291,7 +291,7 @@ Didact.render(<App stories={stories} />, document.getElementById("root"));

[>>> codepen](https://codepen.io/pomber/pen/RVqBrx?editors=0010)

使用组件使我们能够创建自己的“JSX标签”,封装组件状态,并仅在受影响的子树上运行协调算法
使用组件使我们能够创建自己的“JSX标签”,封装组件状态,并仅在受影响的子树上运行对比算法

![4-codepen](./imgs/4-codepen.gif)

Expand Down
Loading

0 comments on commit 1ef5749

Please sign in to comment.