我在 React 中有一个组件可以容纳无限数量的子组件,它使用这些子组件生成另一个组件,其中包含原始子组件。重点是用一个装饰它的功能的新组件包装原始子组件。代码如下所示:
const Form = ({ children }) => (
<FormGroupComponent>
{children.map(child => (
<CheckboxAndChild
checked={child.props.checked}
setCheckbox={child.props.setCheckbox}
>
{child}
</CheckboxAndPicker>
))}
</FormGroupComponent>
);
const CheckboxAndPicker = ({ checked, setCheckbox, children }) => (
<div>
<div>
<Checkbox
checked={checked}
onChange={() => setCheckbox(!checked)}
/>
</div>
<div>{checked && children}</div>
<div/>
</div>
);
这两个功能组件可以这样使用:
...
<Form>
<TimePicker
{...timePickerProps}
checked={showTimeOne}
setChecked={setTimeOne}
/>
<TimePicker
{...timePickerProps}
checked={showTimeTwo}
setChecked={setTimeTwo}
/>
</Form>
...
我发现这段代码有两点奇怪:
“TimePicker”组件内部通常没有“checked”和“setChecked”属性,并且不对这些属性本身做任何事情。这些道具仅用于在“表单”组件中呈现“CheckboxAndPicker”组件。
“表单”组件访问其子组件的道具,以便使用这些道具生成新组件。
这是一种反模式,还是在用新道具装饰现有组件并使用这些新道具生成新组件时可以接受这种功能?
天涯尽头无女友
相关分类