こんにちは、
まず第一に、このライブラリで素晴らしい仕事をしてくれてありがとう;)
カスタムコンポーネントを使用すると、いくつかの位置のバグがあります。これは、ListItem.rightIconButtonで使用されるカスタムIconMenuの例です。
// With my custom component
<ListItem>
[...]
rightIconButton={<CustomComponentListMenu />}
/>
// CustomComponentListMenu.jsx
[...]
render() {
return (
<IconMenu iconButtonElement={this.iconButtonElement} >
<MenuItem onClick={this.onDelete}>Delete</MenuItem>
</IconMenu>
);
}
IconMenuは正常に機能しますが、アイコンメニューの位置が適切ではありません(添付のスクリーンショットを参照)。
実際、問題は、スタイル(位置:絶対、右:4、上:12)がIconMenuタグ(<IconMenu>)ではなくカスタムコンポーネントタグ(<CustomComponentListMenu>)に適用されることだと思います。
ListItem.js:622(https://github.com/callemall/material-ui/blob/master/src/List/ListItem.js#L622)を参照してください。ここで、_rightIconButtonElement_は私のカスタム要素であり、iconMenuではありません。
それは実際にはバグではないことは理解していますが、カスタムコンポーネントを使用する場合は重大な制限です(それがReactの要点ですよね?)。
この「バグ」は、ListItem.leftAvatarのAvatarなどの他のコンポーネントでも発生することに注意してください。
スクリーンショット:
カスタムコンポーネントを許可するソリューションを見つけることができると思いますか?
素材-UI:0.15.0
反応:14.7
ブラウザ:Chrome、Firefox
私はちょうどこれと同じ奇妙な行動を経験しました。 それを掘り下げた後、 rightIconButton
小道具はコンポーネントではなく要素を必要としているように見えます。 rightIconButton={<CustomComponentListMenu />}
をrightIconButton={(new CustomComponentListMenu).render()}
変更してみてください。 ステートレス機能コンポーネントについては、 <Component />
-> Component()
試してください。
( React.createElement(Component)
は機能しないことに注意してください。理由については詳細を調べていません)
Reactを使い始めたばかりで、これが意図的なものかどうかはわかりませんが、 rightIconButton
が要素ではなくコンポーネントに設定されている場合、この複雑な方法で失敗するのではなく、エラーメッセージが表示される場合があります。 。
...props
を渡しますか? アバターにも同じ問題がありました。 MUIはいくつかの小道具を内部的に設定していると思います。
私のカスタムアバターコンポーネントは次のようになります。
...
const Avatar = (props) => {
const propsWithoutMember = { ...props };
delete propsWithoutMember.member;
return (
<MUIAvatar {...propsWithoutMember}>{getInitials(props.member)}</MUIAvatar>
);
};
...
カスタムプロップタイプを渡す前に削除する必要がありました。そうしないと、MUIが不明なプロップについて文句を言います。
ええ、これはReactを始めたばかりの間違いで、 ...props
を渡すだけで済みました。
コンポーネントをv1-betaブランチに移植してきまし
それでも、v1-betaがマスターブランチを引き継ぐまで、PR修正を受け入れます。
最も参考になるコメント
私はちょうどこれと同じ奇妙な行動を経験しました。 それを掘り下げた後、
rightIconButton
小道具はコンポーネントではなく要素を必要としているように見えます。rightIconButton={<CustomComponentListMenu />}
をrightIconButton={(new CustomComponentListMenu).render()}
変更してみてください。 ステートレス機能コンポーネントについては、<Component />
->Component()
試してください。(
React.createElement(Component)
は機能しないことに注意してください。理由については詳細を調べていません)Reactを使い始めたばかりで、これが意図的なものかどうかはわかりませんが、
rightIconButton
が要素ではなくコンポーネントに設定されている場合、この複雑な方法で失敗するのではなく、エラーメッセージが表示される場合があります。 。