Material-ui: [ListItem] rightIconButton : μ‚¬μš©μž μ •μ˜ IconMenu ꡬ성 μš”μ†Œμ˜ μŠ€νƒ€μΌ 버그

에 λ§Œλ“  2016λ…„ 04μ›” 13일  Β·  4μ½”λ©˜νŠΈ  Β·  좜처: mui-org/material-ui

μ•ˆλ…•ν•˜μ„Έμš”,

μš°μ„ ,이 λΌμ΄λΈŒλŸ¬λ¦¬μ— λŒ€ν•œ 멋진 μž‘μ—…μ— κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€;)

μ‚¬μš©μž 지정 ꡬ성 μš”μ†Œλ₯Ό μ‚¬μš©ν•  λ•Œ λͺ‡ 가지 μœ„μΉ˜ 버그가 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒμ€ 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λŠ” 잘 μž‘λ™ν•˜μ§€λ§Œ μ•„μ΄μ½˜ λ©”λ‰΄μ˜ μœ„μΉ˜κ°€ 쒋지 μ•ŠμŠ΅λ‹ˆλ‹€ (첨뢀 된 슀크린 μƒ· μ°Έμ‘°).

μ‹€μ œλ‘œ λ¬Έμ œλŠ” μŠ€νƒ€μΌ (position : absolute, right : 4, top : 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와 같은 λ‹€λ₯Έ ꡬ성 μš”μ†Œμ—λ„ λ‚˜νƒ€λ‚©λ‹ˆλ‹€.

슀크린 μƒ· :
screen-bug-mui-listitem

λ§žμΆ€ν˜• μ»΄ν¬λ„ŒνŠΈλ₯Ό ν—ˆμš©ν•˜λŠ” μ†”λ£¨μ…˜μ„ 찾을 수 μžˆλ‹€κ³  μƒκ°ν•˜μ‹­λ‹ˆκΉŒ?

버전

Material-UI : 0.15.0
λ°˜μ‘ : 14.7
λΈŒλΌμš°μ € : Chrome, Firefox

bug πŸ› List

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ‚˜λŠ” 방금 이와 같은 μ΄μƒν•œ 행동을 κ²½ν—˜ν–ˆμŠ΅λ‹ˆλ‹€. 그것을 νŒŒν—€μΉœ 후에 rightIconButton prop은 μ»΄ν¬λ„ŒνŠΈκ°€ μ•„λ‹Œ μš”μ†Œλ₯Ό μ›ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. rightIconButton={<CustomComponentListMenu />} 을 rightIconButton={(new CustomComponentListMenu).render()} λ³€κ²½ν•΄λ³΄μ„Έμš”. μƒνƒœ λΉ„ μ €μž₯ κΈ°λŠ₯ ꡬ성 μš”μ†Œμ˜ 경우 <Component /> -> Component() μ‹œλ„ν•˜μ‹­μ‹œμ˜€.

( React.createElement(Component) λŠ” μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ΄μœ μ— λŒ€ν•΄μ„œλŠ” μžμ„Ένžˆ μ‚΄νŽ΄ 보지 μ•Šμ•˜μŠ΅λ‹ˆλ‹€.)

방금 Reactλ₯Ό μ‚¬μš©ν•˜κΈ° μ‹œμž‘ν–ˆλŠ”λ° 이것이 μ˜λ„μ  인 것인지 μ•„λ‹Œμ§€ λͺ¨λ₯΄κ² μ§€λ§Œ rightIconButton κ°€ μš”μ†Œ λŒ€μ‹  ꡬ성 μš”μ†Œλ‘œ μ„€μ • 될 λ•Œ 였λ₯˜ λ©”μ‹œμ§€κ°€μ΄ λ‚œν•΄ν•œ λ°©μ‹μœΌλ‘œ μ‹€νŒ¨ν•˜λŠ” λŒ€μ‹  μˆœμ„œκ°€μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. .

λͺ¨λ“  4 λŒ“κΈ€

λ‚˜λŠ” 방금 이와 같은 μ΄μƒν•œ 행동을 κ²½ν—˜ν–ˆμŠ΅λ‹ˆλ‹€. 그것을 νŒŒν—€μΉœ 후에 rightIconButton prop은 μ»΄ν¬λ„ŒνŠΈκ°€ μ•„λ‹Œ μš”μ†Œλ₯Ό μ›ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. 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>
  );
};
...

λ‚˜λŠ” 그것을 μ „λ‹¬ν•˜κΈ° 전에 λ‚΄ μ»€μŠ€ν…€ proptypesλ₯Ό μ œκ±°ν•΄μ•Όλ§Œν–ˆλ‹€. 그렇지 μ•ŠμœΌλ©΄ MUIκ°€ μ•Œλ €μ§€μ§€ μ•Šμ€ props에 λŒ€ν•΄ λΆˆν‰ ν•  것이닀.

예 이것은 React둜 막 μ‹œμž‘ν•œ μ‹€μˆ˜ ...props 만 ν†΅κ³Όν•˜λ©΄λ©λ‹ˆλ‹€.

v1-beta 브랜치 에 ꡬ성 μš”μ†Œλ₯Ό μ΄μ‹ν–ˆμŠ΅λ‹ˆλ‹€. μ²˜μŒλΆ€ν„° λ‹€μ‹œ κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€. ν…ŒμŠ€νŠΈν•˜μ§€λŠ” μ•Šμ•˜μ§€λ§Œ λ¬Έμ œκ°€ ν•΄λ‹Ή λΆ„κΈ°μ—μ„œ ν•΄κ²°λ˜μ—ˆμ„ κ°€λŠ₯성이 ν½λ‹ˆλ‹€. λ”°λΌμ„œ λ‚˜λŠ” 그것을 λ‹«μŠ΅λ‹ˆλ‹€.
ν•˜μ§€λ§Œ v1-betaκ°€ λ§ˆμŠ€ν„° 브랜치λ₯Ό 인수 ν•  λ•ŒκΉŒμ§€ PR μˆ˜μ • 사항을 μˆ˜λ½ν•©λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰