我应该手动将函数传递给我的组件还是使用 ref 属性?

Ali*_*adi 3 javascript design-patterns reactjs

我已经构建了自己的FormBuilder组件(5k现在几乎是一行),因此它可以满足我的所有需求,我遇到的一个问题是FormData在用户需要的任何时间加载一组新组件,因为我FormBuilder可以接受一组嵌套组件,比较这些更改有点困难,并且处理组件中的所有内容确实挂载了,一个简单的方法是在组件loadFormData内部构建一个方法FormBuilder并从组件外部调用此方法
我知道这可以很容易地使用ref attribute,但反应强烈建议避免这种情况,我得到了灰心!我不确定我是否应该这样做!
所以我想出了一个新的替代方案,它有点做同样的事情:

class A {

    onGetFormBuilderInternalFunction = (functions) => {
        this.formBuilderFunctions = functions
    }

    onLoadButtonClick = () => {        
      this.formBuilderFunctions.loadFormData(someNewData)
    }

    render () {
        <FormBuilder onGetInternalFunction={this.onGetFormBuilderInternalFunction}
    }
}


class FormBuilder {
    componentDidMount() {
        if (this.props.onGetInternalFunction) {
            this.props.onGetInternalFunction({
                loadFormData: this.loadFormData,
            })
        }
    }
}  
Run Code Online (Sandbox Code Playgroud)

那么你怎么看?,这是更好的方法吗?还是这仍然很糟糕?,我在想使用这种方法至少只能访问我需要的功能,而不能访问其他所有功能。
我还应该提到,loadFormData这只是一个例子,至少有几个special function我真的认为最好从外部调用,所以即使我以某种方式从 props 传递新数据并处理它componentDidUpdate,对于其余的这些功能,我仍然需要访问FormBuilder

Dav*_*haw 5

是的,这是正确的方法。但是,如果您有一个 5,000 行的组件,我强烈建议将其分解为更小的子组件。