Я создал свой собственный 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,
})
}
}
}
Так что вы думаете? лучший подход? или это все-таки плохо? Я думал, что использование этого метода, по крайней мере, даст только доступ к нужным мне функциям, а не ко всему остальному.
Я должен также упомянуть, loadFormData
- это просто один пример, и есть по крайней мере, пару из этих special function
, которые я действительно считаю, лучше всего просто вызывать извне, так что даже если я каким-то образом передам новые данные из реквизита и обработаю их в componentDidUpdate
, для остальных этих функций я все еще продолжаю необходимо получить доступ к FormBuilder