在使用 React.Children API 修改子项后,如何在 React 中将 return 子项作为函数?

How to return child as a function in React after modifying the children with React.Children API?

我确实有这样的组件层次结构

const Parent = ({ children }) => {
    const modifiedChildren = React.Children(children, (child) => {
        return React.cloneElement(child, {...child.props, extraProp: "someValue"})
    })
    return modifiedChildren
}

const App = () => {
    return (
        <Parent>
            <div>First</div>
            <div>Second</div>
            <div>Third</div>
        </Parent>
    )
}

它工作正常,但我想 return 子组件作为 Parent 组件的函数。

所以我的问题是如何 return children 作为 Parent 的函数,当你需要首先通过添加一些道具等来操纵 children 时

编辑

我的目标是这样的...

const Parent = ({ children }) => {
    const data = "some dynamic data"

    // here I want to modify children first, as I need to add some props dynamically
    
    return children(data)
}

const App = () => {
    return (
        <Parent>
            {(data) => (
                <>
                    <div>First</div>
                    <div>Second</div>
                    <div>Third</div>
                </>
            )}
        </Parent>
    )
}

如果我正确理解您的(更新的)目标,则以下代码应该有效:

const Parent = ({ children }) => {
    const data = "some dynamic data";
    // Call any children specified as functions, passing in data
    let modifiedChildren = children.map((child) =>
      typeof child === 'function' ? child(data) : child);
    // modify modifiedChildren as necessary
    return modifiedChildren;
}

Function-specified children 就是 children。在您的示例中,children 将是一个长度为 1 的数组,唯一的项目等于一个函数。在上面的代码中,我调用了任何 function-specified children。您可以改为检查数组的大小是否为 1 并具有单个函数,然后在这种情况下做一些特殊的事情。