我有以下结构:
FormEditor
-包含多个FieldEditor-
FieldEditor
编辑表单的字段并在其状态下保存有关该字段的各种值
在FormEditor中单击按钮时,我希望能够从所有FieldEditor
组件中收集有关字段的信息,处于其状态的信息,并将其全部包含在FormEditor中。
我考虑过将有关字段信息的信息存储在FieldEditor
的状态之外,而将其置于FormEditor
的状态。但是,这将需要FormEditor
在FieldEditor
组件的每个组件发生更改时侦听它们并以其状态存储其信息。
我不能只访问儿童的州吗?理想吗?
它的2020年以及许多人将来到这里寻找类似的解决方案,但要使用Hooks(它们很棒!),并提供有关代码整洁度和语法的最新方法。
因此,如先前的回答所述,解决此类问题的最佳方法是将状态保持在子组件之外
fieldEditor
。您可以通过多种方式做到这一点。最“复杂”的是具有父级和子级都可以访问和修改的全局上下文(状态)。当组件在树层次结构中很深时,这是一个很好的解决方案,因此在每个级别发送道具的成本很高。
在这种情况下,我认为这样做不值得,仅使用功能强大的,更简单的方法即可为我们带来所需的结果
React.useState()
。使用React.useState()钩子的方法,比使用Class组件更简单
如前所述,我们将处理更改并将子组件的数据存储
fieldEditor
在父组件中fieldForm
。为此,我们将发送一个引用,该引用将处理并将更改应用于fieldForm
状态,您可以使用以下方法进行操作:请注意,这
React.useState({})
将返回一个数组,其中位置0是调用时指定的值(在这种情况下为Empty对象),位置1是对修改该值的函数的引用。现在有了子组件,
FieldEditor
您甚至不需要创建带有return语句的函数,带有箭头函数的精益常量就可以了!Aaaaand we are done, nothing more, with just these two slime functional components we have our end goal "access" our child
FieldEditor
value and show it off in our parent.You could check the accepted answer from 5 years ago and see how Hooks made React code leaner (By a lot!).
Hope my answer helps you learn and understand more about Hooks, and if you want to check a working example here it is.