From 94fdff686d9a238fa4268a2ad4d54602c33d5b16 Mon Sep 17 00:00:00 2001 From: Administrator Date: Mon, 6 Apr 2020 15:32:03 +0800 Subject: [PATCH] implent mapChildren method --- src/react/ReactChildren.js | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/react/ReactChildren.js b/src/react/ReactChildren.js index bbc07d8..4cefd76 100644 --- a/src/react/ReactChildren.js +++ b/src/react/ReactChildren.js @@ -1,6 +1,23 @@ +import { cloneElement } from "react"; + function mapChildren(children, func, context) { //TODO实现此mapChildren方法 - return children; + // key 格式 .0/.$div0A | .$key2/.$div1A | .3:$key4/.$div3A + // .[原来的 key,没有就使用 index]/.$[现在的 key],如果是嵌套的则为 .[索引]:$[原来的key,没有就使用索引]/.$[现在的 key] + function recursion(items, pId) { + return items.map((it, index) => { + if (Array.isArray(it)) { + return recursion(it, !pId ? index : pId+':'+index) + } else { + let curIndex = children.flat(Infinity).findIndex(cur => cur.key === it.key) + return func(it, curIndex).map((i) => cloneElement(it, { + key: `.${!pId ? '' : pId + ':'}${it.key ? '$' + it.key : pId}/.$${i.key}` + }) + ) + } + }) + } + return recursion(children, 0).flat(Infinity) } export { -- Gitee