私はドロップダウンメニュー用のカスタム反応コンポーネントを作成しています。私は、このコンポーネントを使用するために念頭に置いていた構造が、私はこれを実装したかった方法特定のタイプの子供を反応コンポーネントで要求する
<Dropdown>
<DropdownTrigger> // The button that triggers the dropdown to open or close
open me
</DropdownTrigger>
<DropdownButton> // A button inside the dropdown
Option 1
</DropdownButton>
</Dropdown>
のラインのうち何かだったその子供のDropdownTrigger
コンポーネントがある場合Dropdown
コンポーネントのチェックを持つことであり、そしてもし指定されたDropdownTrigger
コンポーネントをReact.cloneElement
で複製し、onClick
プロパティを渡します。これはDropdown
コンポーネントの状態更新を呼び出します。 Dropdown.js
import DropdownTrigger from './DropdownTrigger';
_toggleDropdown() {
this.setState({
isOpen: !this.state.isOpen
});
}
_renderTriggerButton() {
const triggerChild = this.props.children.find(child => child.type === DropdownTrigger);
return React.cloneElement(triggerChild, {
...triggerChild.props,
onClick:() => this._toggleDropdown()
});
}
の
小さなコードスニペットこれは正しいアプローチですし、もしそうなら、Dropdown
コンポーネントを検証するクリーン/素敵可能な方法であるものの子としてDropdownTrigger
を持っています。つまり、開発者はDropdown
コンポーネントの子として常にDropdownTrigger
を含める必要があるため、開発者に<TriggerButton>
コンポーネントをドロップダウンの子として渡すべきであることを伝える良い方法があります。
構造の変更についてのご提案もあります。ありがとう!
が、それは多分あなたは単に ''に ''のプロパティを指定することができようになります。子どもとして渡すことを要求するのではなく、 –
私はこれを最初に試みましたが、私の ''内でカスタムコンポーネントを使用できるようにしたいと思います。おそらくReactコンポーネントが必要な ''に 'triggerButton'プロパティを持たせることができますか?そうすれば私は子供たちをループさせる必要はありません。 –
Niekert