我有一个自动完成组件,其中包含以下道具:
value
(显示文字),onChange
(每次击键都会被解雇)onSelect
(当用户从列表中选择内容时触发
建议,传递所选对象+显示所选对象的文本 - 与value
)状态:
- suggestionsList
(我已经确定它是一个州,因为它是该组件内部的东西)。
在其中一个视图中,此组件的父视图在每次击键后都不关心value
。它只关心onSelect
处理程序传递的选定项目。所以在这种情况下value
&不需要onChange
道具。 value
可能会成为自动填充组件的内部状态。
但是在其他一个观点中,父母也希望了解每次击键。这意味着父母需要将value
保持在他的状态,并将其作为道具传递。还需要onChange
道具来通知父母改变其状态。
如何构建自动完成组件以便它处理这两种情况?哪些属性应该是道具?哪些属性?
任何建议表示赞赏。
答案 0 :(得分:1)
在第二种情况下,如果父母需要知道当前value
,则不需要保留变量,所以我想如果你传递当前value
(来自内部状态变量)作为onChange
prop函数的参数,父节点会注意到更改并相应地更新。
另一种方法是使用value
属性和内部状态变量。我的意思是:如果父母希望控制value
它将有一个状态条目,并将负责更新它,在其他情况下,不能提供value
属性,因为它会结束为常数。您的组件将在每次提供时使用此属性作为当前值,并且父级应使用onChange
来更新它所拥有的va;
您可以在material-ui中查看自动完成组件的源代码。