Reactjs 获取输入组件的深度子级

Reactjs 获取输入组件的深度子级,reactjs,react-admin,Reactjs,React Admin,我仍在扩展react adminTabbedForm,由于我需要自定义布局,我需要从TabbedForm访问布局中的FormInputs,以便FindAbswerRors功能与我的布局配合良好 现在,该函数写入: export const findTabsWithErrors = ( state, props, collectErrorsImpl = collectErrors ) => { const errors = collectErrorsImpl(

我仍在扩展react admin
TabbedForm
,由于我需要自定义布局,我需要从
TabbedForm
访问布局中的
FormInput
s,以便
FindAbswerRors
功能与我的布局配合良好

现在,该函数写入:

export const findTabsWithErrors = (
    state,
    props,
    collectErrorsImpl = collectErrors
) => {
    const errors = collectErrorsImpl(state, props);

    return Children.toArray(props.children).reduce((acc, child) => {
        const inputs = Children.toArray(child.props.children);

        if (inputs.some(input => errors[input.props.source])) {
            return [...acc, child.props.label];
        }

        return acc;
    }, []);
};
它期望
FormInput
组件正好位于子树的下两级

在我的例子中,它们应该向下3级,但也许我不能不依赖层次结构的深度来获得
FormInput
组件

我想要一种方法来获取所有
FormInput
组件的子级,就像我们使用DOM所做的那样,不管它们嵌套的有多深


那么这样做的方法是什么呢?我应该使用refs吗?我不知道…

这是我想做的事情,因为我对目前的实现不满意。我认为有两种方法可以做到这一点:

一种方法是使用
FormTab
组件依赖React上下文,为register的输入提供方法(嘿,我属于你,
FormTab
)。然而,我认为这打破了自上而下的反应流程

另一种方法是复制关于哪些输入属于
表单选项卡
,可能是
字段
属性的信息,该属性将是该选项卡中输入名称的数组。然而,这将使动态形式变得困难


作为最后手段,您必须实现自己的
选项卡表单

我编写了一个库,可以帮助您解决这个问题


我确实实现了我自己的
TabbedForm
,但它太糟糕了。。。这是react admin的一个副本,使用不同的循环获取输入。我想让输入注册到选项卡,我想这将是一个非常简单的api。我希望有时间尝试一个实现。另一种肮脏的方法是从上到下遍历子对象,直到到达maxDepth,然后查找
源属性或其他自定义道具。但这也不“干净”。在这件事上有什么进展吗?你有新的想法吗?我实现了一个CustomForm,它将
renderInput
函数传递给它的子函数,这样布局就可以是我想要的任何东西。它还可以注册输入,我愿意实现它,但我需要指针,因为我不知道如何使用react上下文。是否已经有我应该使用的表单上下文?或者我可以从ra中得到启发的具有类似行为的组件?不,它可能只会发生在下一个主要版本中
const inputs = deepFilter(props.children, child => child.type === 'input')