diff --git a/src/index.js b/src/index.js
index 82433470761e01cd6adcfe1e06535ee1819bc83b..4e84a73388aeb772709aa8c547eee5744080ad74 100644
--- a/src/index.js
+++ b/src/index.js
@@ -7,7 +7,7 @@ class Child extends Component {
const mappedChildren = React.Children.map(
this.props.children,
(item, index) => (
- [
{item}
, {item}
]
+ [{item}
, [2222], {item}
]
)
);
console.log(mappedChildren);
diff --git a/src/react/ReactChildren.js b/src/react/ReactChildren.js
index bbc07d81edaad3705a3dca0942e1cbc01bff2624..2c3e1fc2deebf8570cb68f0a8777b8e3f69031fc 100644
--- a/src/react/ReactChildren.js
+++ b/src/react/ReactChildren.js
@@ -1,6 +1,52 @@
+import {ReactElement} from './ReactElement'
+
function mapChildren(children, func, context) {
//TODO实现此mapChildren方法
- return children;
+ let result = []
+ for(let i = 0,len =children.length;i < len; i++) {
+ let child = children[i]
+ let newEl = null
+ if(Array.isArray(child)) {
+ child.forEach((item, index)=>{
+ let oldkey = item.key ? item.key : i
+ newEl = func(child, i)
+ newEleChange(result, newEl, oldkey)
+ console.log(oldkey)
+ })
+ }else{
+ let oldkey = child.key ? child.key : i
+ newEl = func(child, i)
+ newEleChange(result, newEl, oldkey)
+ console.log(oldkey)
+ }
+
+ }
+ console.log(result, 'jieguo')
+ return result;
+}
+
+// key的算法不懂怎么弄
+function newEleChange(result, newEl, oldkey){
+ if(Array.isArray(newEl)) {
+ for(let j = 0, len = newEl.length; j < len; j++) {
+ let subChild = newEl[j]
+ newEleChange(result, subChild, oldkey)
+ }
+ }else{
+ replaceKeyAndClone(result, newEl, oldkey)
+ }
+}
+
+function replaceKeyAndClone(result, oldEl, oldkey) {
+ result.push(ReactElement(
+ oldEl.type,
+ oldkey+'/'+(oldEl.key?oldEl.key:''),
+ oldEl.ref,
+ oldEl._self,
+ oldEl._source,
+ oldEl._owner,
+ oldEl.props,
+ ))
}
export {
diff --git a/src/react/ReactElement.js b/src/react/ReactElement.js
index 25fdf5ea1b24116f963f57890892d03e3d2e3a78..823e9f56ef97987c5e9dc1e16f79a79a132be1fe 100644
--- a/src/react/ReactElement.js
+++ b/src/react/ReactElement.js
@@ -59,7 +59,7 @@ export function createElement(type, config, children) {
type, key, ref, self, source, ReactCurrentOwner.current, props
)
}
-function ReactElement(type, key, ref, _self, _source, _owner, props) {
+export function ReactElement(type, key, ref, _self, _source, _owner, props) {
const element = {
$$typeof: REACT_ELEMENT_TYPE,
type,
@@ -71,4 +71,4 @@ function ReactElement(type, key, ref, _self, _source, _owner, props) {
_source
}
return element;
-}
\ No newline at end of file
+}