ΠΠ΄ΡΠ°Π²ΡΡΠ²ΡΠΉΡΠ΅,
ΠΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ, ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΎΡΠ»ΠΈΡΠ½ΡΡ ΡΠ°Π±ΠΎΡΡ Π½Π°Π΄ ΡΡΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ;)
Π£ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ². ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ IconMenu, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ Π² ListItem.rightIconButton:
// With my custom component
<ListItem>
[...]
rightIconButton={<CustomComponentListMenu />}
/>
// CustomComponentListMenu.jsx
[...]
render() {
return (
<IconMenu iconButtonElement={this.iconButtonElement} >
<MenuItem onClick={this.onDelete}>Delete</MenuItem>
</IconMenu>
);
}
IconMenu ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΠΎΡΠΎΡΠΎ, Π½ΠΎ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ΅Π½Ρ Π·Π½Π°ΡΠΊΠΎΠ² Π½Π΅ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ (ΡΠΌ. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΉ ΡΠ½ΠΈΠΌΠΎΠΊ ΡΠΊΡΠ°Π½Π°).
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, Ρ Π΄ΡΠΌΠ°Ρ, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠΈΠ»Ρ (position: absolute, right: 4, top: 12) ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΠΊ ΠΌΠΎΠ΅ΠΌΡ ΡΠ΅Π³Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° (<CustomComponentListMenu>), Π° ΠΠ ΠΊ ΡΠ΅Π³Ρ IconMenu (<IconMenu>).
Π‘ΠΌ. ListItem.js: 622 (https://github.com/callemall/material-ui/blob/master/src/List/ListItem.js#L622), Π³Π΄Π΅ _rightIconButtonElement_ - ΡΡΠΎ ΠΌΠΎΠΉ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, Π° Π½Π΅ iconMenu.
Π― ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΎΡΠΈΠ±ΠΊΠ°, Π½ΠΎ ΡΡΠΎ ΡΠ΅ΡΡΠ΅Π·Π½ΠΎΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° (Π² ΡΡΠΎΠΌ Π²Π΅ΡΡ ΡΠΌΡΡΠ» React, Π½Π΅ ΡΠ°ΠΊ Π»ΠΈ?).
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΡΡΠ° Β«ΠΎΡΠΈΠ±ΠΊΠ°Β» ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π² Π΄ΡΡΠ³ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°Ρ , ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ Avatar Π² ListItem.leftAvatar.
Π‘ΠΊΡΠΈΠ½ΡΠΎΡ:
ΠΠ°ΠΊ Π²Ρ Π΄ΡΠΌΠ°Π΅ΡΠ΅, ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΉΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ?
ΠΠ°ΡΠ΅ΡΠΈΠ°Π»-UI: 0.15.0
Π Π΅Π°ΠΊΡΠΈΡ: 14,7
ΠΡΠ°ΡΠ·Π΅Ρ: Chrome, Firefox
Π― ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΈΡΠΏΡΡΠ°Π» ΡΠ°ΠΊΠΎΠ΅ ΠΆΠ΅ ΡΡΡΠ°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. ΠΠΎΠΊΠΎΠΏΠ°Π²ΡΠΈΡΡ Π² ΡΡΠΎΠΌ, ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ, ΡΡΠΎ ΠΎΠΏΠΎΡΡ rightIconButton
Π½ΡΠΆΠ΅Π½ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, Π° Π½Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ. ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ rightIconButton={<CustomComponentListMenu />}
Π½Π° rightIconButton={(new CustomComponentListMenu).render()}
. ΠΠ»Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ
ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π±Π΅Π· ΡΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ <Component />
-> Component()
.
(ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ React.createElement(Component)
Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ; Ρ Π½Π΅ ΡΠ°Π·Π±ΠΈΡΠ°Π»ΡΡ Π² Π΄Π΅ΡΠ°Π»ΡΡ
, ΠΏΠΎΡΠ΅ΠΌΡ)
Π― ΡΠΎΠ»ΡΠΊΠΎ Π½Π°ΡΠ°Π» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ React, ΠΈ Ρ Π½Π΅ Π·Π½Π°Ρ, Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎ ΡΡΠΎ ΠΈΠ»ΠΈ Π½Π΅Ρ, Π½ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅, ΠΊΠΎΠ³Π΄Π° rightIconButton
ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, Π° Π½Π΅ Π½Π° ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅, Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ΅ΡΠΏΠ΅ΡΡ Π½Π΅ΡΠ΄Π°ΡΡ ΡΠ°ΠΊΠΈΠΌ Π·Π°ΠΏΡΡΠ°Π½Π½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ .
ΠΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΠ΅ ...props
? Π£ ΠΌΠ΅Π½Ρ Π±ΡΠ»Π° ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΠΠ²Π°ΡΠ°ΡΠΎΠΌ. Π― ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ, ΡΡΠΎ MUI ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅ΠΊΠ²ΠΈΠ·ΠΈΡΡ Π²Π½ΡΡΡΠΈ.
ΠΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Avatar Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
...
const Avatar = (props) => {
const propsWithoutMember = { ...props };
delete propsWithoutMember.member;
return (
<MUIAvatar {...propsWithoutMember}>{getInitials(props.member)}</MUIAvatar>
);
};
...
ΠΠ½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΡΠ΄Π°Π»ΠΈΡΡ ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΏΡΠΎΠΏΡΠΈΠΏΡ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΈΡ , ΠΈΠ½Π°ΡΠ΅ MUI Π±ΡΠ΄Π΅Ρ ΠΆΠ°Π»ΠΎΠ²Π°ΡΡΡΡ Π½Π° Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠ΅ ΡΠ΅ΠΊΠ²ΠΈΠ·ΠΈΡΡ.
ΠΠ°, ΡΡΠΎ Π±ΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ°, ΡΠ²ΡΠ·Π°Π½Π½Π°Ρ Ρ Π½Π°ΡΠ°Π»ΠΎΠΌ ΡΠ°Π±ΠΎΡΡ Ρ React, Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ...props
ΠΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π½Π° Π²Π΅ΡΠΊΡ v1-beta . ΠΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ Π΅Π³ΠΎ Ρ Π½ΡΠ»Ρ. Π₯ΠΎΡΡ ΠΌΡ Π½Π΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π»ΠΈ Π΅Π³ΠΎ, Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½Π° ββΠ² ΡΡΠΎΠΉ Π²Π΅ΡΠΊΠ΅. ΠΠ½Π°ΡΠΈΡ, Π·Π°ΠΊΡΡΠ²Π°Ρ.
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ PR Π΄ΠΎ ΡΠ΅Ρ
ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° v1-beta Π½Π΅ Π²ΠΎΠ·ΡΠΌΠ΅Ρ Π½Π° ΡΠ΅Π±Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ Π²Π΅ΡΠΊΡ.
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
Π― ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΠΈΡΠΏΡΡΠ°Π» ΡΠ°ΠΊΠΎΠ΅ ΠΆΠ΅ ΡΡΡΠ°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. ΠΠΎΠΊΠΎΠΏΠ°Π²ΡΠΈΡΡ Π² ΡΡΠΎΠΌ, ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ, ΡΡΠΎ ΠΎΠΏΠΎΡΡ
rightIconButton
Π½ΡΠΆΠ΅Π½ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, Π° Π½Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ. ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡrightIconButton={<CustomComponentListMenu />}
Π½Π°rightIconButton={(new CustomComponentListMenu).render()}
. ΠΠ»Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π±Π΅Π· ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅<Component />
->Component()
.(ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ
React.createElement(Component)
Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ; Ρ Π½Π΅ ΡΠ°Π·Π±ΠΈΡΠ°Π»ΡΡ Π² Π΄Π΅ΡΠ°Π»ΡΡ , ΠΏΠΎΡΠ΅ΠΌΡ)Π― ΡΠΎΠ»ΡΠΊΠΎ Π½Π°ΡΠ°Π» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ React, ΠΈ Ρ Π½Π΅ Π·Π½Π°Ρ, Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎ ΡΡΠΎ ΠΈΠ»ΠΈ Π½Π΅Ρ, Π½ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅, ΠΊΠΎΠ³Π΄Π°
rightIconButton
ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, Π° Π½Π΅ Π½Π° ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅, Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠ΅ΡΠΏΠ΅ΡΡ Π½Π΅ΡΠ΄Π°ΡΡ ΡΠ°ΠΊΠΈΠΌ Π·Π°ΠΏΡΡΠ°Π½Π½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ .