【发布时间】:2021-04-12 20:58:48
【问题描述】:
在反应最佳实践中是从父级到子级的数据流,事件将从子级传递到父级。
在这个 UI 中,我们有一个父组件,其中包含 2 个带有表单的子组件。当用户点击父组件中的提交按钮时,我们现在必须从子组件收集数据。
可能的解决方案(坏解决方案 | 反模式):
- 从子节点传递 ref 并从父节点触发子方法以收集数据(从父节点访问子方法不是一个好主意)
<Parent>
onFormData(data) {
//here collect data from child
}
onSubmit() {
//Trigger a method onData in child
aRef.collectData()
}
<child-A ref={aRef} onData={onFormData}></Child-A>
<Child-B ref={bRef} onData={onFormData}></Child-B>
<button onClick={onSubmit}>Submit</Submit>
</Parent>
- 将道具绑定到孩子,在提交点击时将道具的值更改为虚拟值。在 useEffect 挂钩中观察相同的道具(非常糟糕的解决方案)
<Parent>
onFormData(data) {
//here collect data from child
}
onSubmit() {
//update randomValue, which will be observed in useEffect that calls onData method from child
randomValue = Math.random();
}
<child-A triggerSubmit={randomValue} onData={onFormData}></Child-A>
<Child-B triggerSubmit={randomValue} onData={onFormData}></Child-B>
<button onClick={onSubmit}>Submit</Submit>
</Parent>
还有其他处理这些情况的最佳方法吗?如何避免此 UI 的反模式?
【问题讨论】:
-
为了更好地回答这个问题,您能否解释一下为什么需要两种形式而不是一种形式?
-
这里甚至可能只是一种形式..这只是一个解释问题的示例..这里的问题是当提交按钮在父级时如何通知子级触发事件.. .
-
你有没有找到解决这个问题的好方法?
标签: reactjs