Material-ui: [MenuItem] 메뉴 ν•­λͺ© λ‚΄μ˜ 링크

에 λ§Œλ“  2015λ…„ 01μ›” 06일  Β·  43μ½”λ©˜νŠΈ  Β·  좜처: mui-org/material-ui

μ•ˆλ…•ν•˜μ„Έμš”, 메뉴 ν•­λͺ©μ˜ ν˜„μž¬ κ΅¬ν˜„μ„ 보고 μžˆμ—ˆκ³  μ‹€μ œ 링크(html <a> νƒœκ·Έλ₯Ό 의미)κ°€ μ—†λ‹€λŠ” 것을 μ•Œμ•˜μŠ΅λ‹ˆλ‹€. 결과적으둜 예λ₯Ό λ“€μ–΄ 탐색 λͺ¨μŒμ—λ„ μ‹€μ œ 링크가 μ—†μœΌλ©° λ‹€λ₯Έ νŽ˜μ΄μ§€λ‘œμ˜ μ „ν™˜μ€ onclick 이벀트λ₯Ό 톡해 κ΄€λ¦¬λ©λ‹ˆλ‹€.

특히 μ„œλ²„ μΈ‘ λ Œλ”λ§ νŽ˜μ΄μ§€λ₯Ό κ³ λ €ν•  λ•Œ 링크가 있으면 κ°œμ„ λ  것이라고 μƒκ°ν•©λ‹ˆλ‹€.

이것이 말이 λœλ‹€κ³  μƒκ°ν•©λ‹ˆκΉŒ, μ•„λ‹ˆλ©΄ 이 λ°©ν–₯으둜 가지 말아야 ν•  νŠΉλ³„ν•œ μ΄μœ κ°€ μžˆμŠ΅λ‹ˆκΉŒ?

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

containerElement μ†Œν’ˆμ„ μ‚¬μš©ν•˜μ„Έμš”!

보닀:
http://stackoverflow.com/questions/32106513/material-ui-menu-using-routes/34507786#34507786

<MenuItem
  containerElement={<Link to="/profile" />}
  primaryText="Profile"
  leftIcon={
    <FontIcon className="material-icons">people</FontIcon>
  } />

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

저도 이게 κΆκΈˆν•©λ‹ˆλ‹€. λ‚΄ μ‘μš© ν”„λ‘œκ·Έλž¨μ—μ„œ μ„œλ²„ μΈ‘ λ Œλ”λ§μ„ μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 이것은 쑰사해야 ν•  μ‚¬ν•­μž…λ‹ˆλ‹€.

href 속성이 μžˆλŠ” 액컀 μš”μ†Œλ₯Ό μ‚¬μš©ν•˜λ©΄ 접근성이 ν–₯μƒλ˜κ³  μ‚¬λžŒλ“€μ΄ μ΅μˆ™ν•œ λΈŒλΌμš°μ € λ™μž‘μ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€(예: μƒˆ νƒ­μ—μ„œ μ—΄λ €λ©΄ ⌘ 클릭).

+1

+1

+1

+1

+1

+1

+1

@ecesena 이것이 μ—¬μ „νžˆ μƒˆλ‘œμš΄ MenuItem ꡬ성 μš”μ†Œμ˜ 문제라고 μƒκ°ν•˜μ‹­λ‹ˆκΉŒ? μ—¬κΈ°λ₯Ό μ°Έμ‘° MenuItem sλŠ” <a>..</a> 둜 λ‘˜λŸ¬μŒ€ 수 μžˆμŠ΅λ‹ˆλ‹€. μ•„λ‹ˆμš”?

이것은 @shaurya947이 μ œμ•ˆν•œ κ²ƒμœΌλ‘œ κ°€λŠ₯ν•©λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같이 LeftNavμ—μ„œ MenuItems λ₯Ό μ‚¬μš©ν•˜λ €κ³  ν•©λ‹ˆλ‹€.

        let menuItems = (
            <div>
                <MenuItem primaryText="Doors"           leftIcon={<FontIcon className="material-icons" color={GlobalStyles.default.activeColor}>home</FontIcon>} /></a>
                <MenuItem primaryText="Load"           leftIcon={<FontIcon className="material-icons" color={GlobalStyles.default.activeColor}>home</FontIcon>} />
                <MenuItem primaryText="Notes"           leftIcon={<FontIcon className="material-icons" color={GlobalStyles.default.activeColor}>home</FontIcon>} />
                <MenuItem primaryText="Alerts"          leftIcon={<FontIcon className="material-icons" color={GlobalStyles.default.activeColor}>home</FontIcon>} />
                <MenuItem primaryText="Admin"           leftIcon={<FontIcon className="material-icons" color={GlobalStyles.default.activeColor}>home</FontIcon>} />
            </div>
        );

        return (
            <LeftNav
                ref="leftNav"
                docked={false}
                onChange={this._onLeftNavChange}
            >
                {menuItems}
            </LeftNav>
        )

<MenuItem> νƒœκ·Έ μ£Όμœ„μ— <a> 감싸면 κ²½κ³  validateDOMNesting(...): <a> cannot appear as a descendant of <a>. See MainLayout > a > ... > MenuItem > ListItem > EnhancedButton > a"

좜λ ₯에 λŒ€ν•΄ React 검사λ₯Ό μˆ˜ν–‰ν•˜λ©΄ λ‹€μŒμ„ μ–»μŠ΅λ‹ˆλ‹€.

<a href="/">
    <MenuItem..>
        <ListItem..>
            <div>
                <EnhancedButton..>
                    <a>
                        <TouchRipple ..>
                    </a>
                </EnhancedButton>
            </div>
        </ListItem>
    </MenuItem>
</a>

<a> μš”μ†Œλ₯Ό μ€‘μ²©ν•˜λŠ” 것은 λΆˆμΎŒν•©λ‹ˆλ‹€.

<MenuItems> λŠ” Button μ„ μ–Έ λ‚΄μ—μ„œ <a> μš”μ†Œλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. μƒμ„±λœ <EnhancedButton> λ‚΄μ—μ„œ href 속성을 μ±„μš°κΈ° μœ„ν•΄ MenuItem μ—μ„œ μ–΄λ–€ μ†Œν’ˆμ΄ μ‚¬μš©λ©λ‹ˆκΉŒ?

MenuItem 개체λ₯Ό LeftNav의 μ†Œν’ˆμœΌλ‘œ μ‚¬μš©ν•˜λ©΄ 연결이 μž‘λ™ν•˜μ§€λ§Œ 이 λ°©λ²•μœΌλ‘œ μ™Όμͺ½/였λ₯Έμͺ½ μ•„μ΄μ½˜μ„ μΆ”κ°€ν•˜λŠ” 방법을 μ•Œ 수 μ—†μ—ˆμŠ΅λ‹ˆλ‹€.

즉:

let menuItems = [
         { route: '/load_areas/'+ this.state.area + '/doors', text: 'Doors' },
         { route: '/load_areas/'+ this.state.area + '/trailer_loads', text: 'Load' },
         { route: 'notes', text: 'Notes' },
         { route: 'alerts', text: 'Alerts' },
         { route: 'admin', text: 'Admin' }
         ];

<LeftNav
                ref="leftNav"
                docked={false}
                menuItems={menuItems}
                onChange={this._onLeftNavChange}
            />

이것은 λ³„λ„μ˜ λ¬Έμ œμ΄λ―€λ‘œ ν•˜λ‚˜λ₯Ό μ—΄μ–΄μ„œ λ ˆμ΄λΈ”μ„ μ§€μ •ν•˜κ³  λ§ˆμΌμŠ€ν†€μ— μΆ”κ°€ν•  수 μžˆλ„λ‘ ν•˜μ‹­μ‹œμ˜€. tnx :grin:

containerElement μ†Œν’ˆμ„ μ‚¬μš©ν•˜μ„Έμš”!

보닀:
http://stackoverflow.com/questions/32106513/material-ui-menu-using-routes/34507786#34507786

<MenuItem
  containerElement={<Link to="/profile" />}
  primaryText="Profile"
  leftIcon={
    <FontIcon className="material-icons">people</FontIcon>
  } />

이제 μ†Œν’ˆ linkButton 의 EnhancedButton λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. href 속성이 제곡되면 LinkButton이 더 이상 ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. v0.16.0μ—μ„œ μ œκ±°λ©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄:

<MenuItem primaryText="Primary Text" href="/your/link" />

hrefλŠ” νŽ˜μ΄μ§€λ₯Ό μƒˆλ‘œκ³ μΉ¨ν•©λ‹ˆλ‹€. λ°˜μ‘ λΌμš°ν„°λ₯Ό μ‚¬μš©ν•˜κ³  μ‹Άλ‹€λ©΄ μ–΄λ–»μŠ΅λ‹ˆκΉŒ

@cezarneaga μ‹œλ„ href="#/your/link"

<MenuItem
  containerElement={<Link to="/profile" />}
.../>

μ„€λͺ…μ„œμ— linkButton 도 μž…λ ₯ν•΄μ•Ό ν•œλ‹€κ³  λ‚˜μ™€ μžˆμŠ΅λ‹ˆλ‹€. 이것을 μ œκ±°ν•˜λ©΄ 였λ₯˜ 없이 μž‘λ™ν•©λ‹ˆλ‹€.

@DaxChen 2016λ…„ 12μ›”(맀우 졜근)에 λŒ€ν•œ stackoverflow μ—…λ°μ΄νŠΈλœ 닡변을 λ³΄μ•˜κ³  이것이 Drawer λ‚΄μ˜ MenuItem에 λŒ€ν•΄ μž‘λ™ν•˜λŠ”μ§€ μ•Œκ³  μžˆλŠ”μ§€ κΆκΈˆν•©λ‹ˆλ‹€. λ‚˜λŠ” μ•„λž˜μ—μ„œ λ‹€μŒμ„ μ‹œλ„ν•˜κ³  있으며 containerElementκ°€ 아무 것도 ν•˜μ§€ μ•ŠλŠ” 것 κ°™κΈ° λ•Œλ¬Έμ— Linkκ°€ MenuItemκ³Ό ν•¨κ»˜ μž‘λ™ν•˜λ„λ‘ ν•  수 μ—†μ—ˆμŠ΅λ‹ˆλ‹€.

<Drawer
  docked={false}
  width={300}
  onRequestChange={this.closeDrawer}
  open={this.state.open}>
  <AppBar title="Title"
 />
  <MenuItem primaryText="home" containerElement={<Link to="/home" />} />
</Drawer>

containerElementλŠ” μž‘λ™ν•˜μ§€λ§Œ λ¬Έμ„œν™”λ˜μ§€ μ•Šμ•˜μœΌλ―€λ‘œ ν˜„μž¬λ‘œμ„œλŠ” 이 μŠ€λ ˆλ“œκ°€ 곡식 λ¬Έμ„œ 역할을 ν•΄μ•Ό ν•  것 κ°™μŠ΅λ‹ˆλ‹€. 감사 ν•΄μš”!

μ•ˆλ…•ν•˜μ„Έμš” @Faolainλ‹˜ !

닡변이 λŠ¦μ–΄ 정말 μ£„μ†‘ν•©λ‹ˆλ‹€...
create-react-app λ₯Ό μ‚¬μš©ν•˜μ—¬ κΉ¨λ—ν•œ μ•±μ—μ„œ 코딩을 μ‹œλ„ν–ˆμ§€λ§Œ λͺ¨λ“  것이 μ œλŒ€λ‘œ μž‘λ™ν•˜λŠ” 것 κ°™μ•˜μŠ΅λ‹ˆκΉŒ?!
react-router λ‹€λ₯΄κ²Œ κ΅¬μ„±ν–ˆκ±°λ‚˜ 버전이 λ‹€λ₯Έκ°€μš”?

μ–΄μ¨Œλ“ , 여기에 예제 Repo κ°€ 있고 여기에 라이브 데λͺ¨κ°€ μžˆμŠ΅λ‹ˆλ‹€.

μ—¬μ „νžˆ 문제의 원인을 찾을 수 μ—†λ‹€λ©΄ μž¬ν˜„ν•  μƒ˜ν”Œ 리포지토리λ₯Ό μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

μœ„μ˜ μ†”λ£¨μ…˜ 쀑 μ–΄λŠ 것도 Safari 및 iOSμ—μ„œ μž‘λ™ν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. react-router λŒ€ν•œ ν•΄κ²° 방법은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

          <MenuItem
            onTouchTap={() => {
              this._yourMethod()
              browserHistory.push('/howItWorks')
            }}
            primaryText="Menu Link"
          />

@janzenz λŠ” 이 μ˜ˆκ°€ κ·€ν•˜μ˜ λΈŒλΌμš°μ €μ—μ„œ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆκΉŒ?

macOS의 Safari와 iOS의 Safariμ—μ„œ μ‹œλ„ν–ˆλŠ”λ° λͺ¨λ‘ μž‘λ™ν•©λ‹ˆλ‹€. 이것은 당신을 μœ„ν•΄ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆκΉŒ?

ν•΄κ²° 방법이 μž‘λ™ν•˜λ”λΌλ„ SEOκ°€ λ‚˜λΉ μ§ˆ 수 있으며 링크 미리보기 및 μƒˆ νƒ­μ—μ„œ μ—΄κΈ° μ˜΅μ…˜ 클릭과 같은 일뢀 κΈ°λ³Έ λ™μž‘μ„ μžƒκ²Œ λ©λ‹ˆλ‹€.

@DaxChen 톡찰λ ₯에 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€. 제 λ¬Έμ œκ°€ κ·€ν•˜μ˜ 첫 번째 링크와 관련이 μžˆλŠ”μ§€ ν™•μ‹€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 이미 두 번째 것을 μ‹œλ„ν–ˆμ§€λ§Œ onTouchTap μ†Œν’ˆμ„ μΆ”κ°€ν•˜λ©΄ <Link /> 더 이상 μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

@janzenz 이전 μ˜ˆμ œμ—μ„œ onTouchTap μ†Œν’ˆ 을 μΆ”κ°€ν–ˆλŠ”λ° μ—¬μ „νžˆ μž‘λ™ν•©λ‹ˆλ‹€.
섀정이 μ–΄λ”˜κ°€ λ‹€λ₯Έμ§€ λͺ¨λ₯΄κ² λ„€μš”... 😒
μ—…λ°μ΄νŠΈλœ μ½”λ“œ λ₯Ό ν™•μΈν•˜κ³  μž‘λ™ν•˜λŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆκΉŒ?

@DaxChen material-ui λ²„μ „μ—μ„œ ~0.16.0 . μ΅œμ‹  ~0.17.0 λ₯Ό μ‹œλ„ν–ˆμ§€λ§Œ μ—¬μ „νžˆ λ¬Έμ œκ°€ μ—†λŠ”μ§€ ν™•μΈν–ˆμŠ΅λ‹ˆκΉŒ?

@janzenz 이전 버전을 μ‚¬μš©ν•˜κ³  μžˆμ—ˆλŠ”λ° μ΅œμ‹  0.17.4 μ—…λ°μ΄νŠΈ ν–ˆλŠ”λ° μ—¬μ „νžˆ μž‘λ™ν•©λ‹ˆλ‹€!

ν„°μΉ˜! μ•„λ§ˆ κ·Έλ•Œ λ‚΄ μ„€μ •. @DaxChen 이 μ‹€μ œ 문제λ₯Ό λ°œκ²¬ν•˜λ©΄ 이 μŠ€λ ˆλ“œλ‘œ λ‹€μ‹œ λŒμ•„μ˜¬

@DaxChen , 당신이 λ‚˜μ—κ²Œ μ€€ 예λ₯Ό μ‹œλ„ν–ˆμ§€λ§Œ μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€.

Uncaught Error: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined. You likely forgot to export your component from the file it's defined in. Check the render method of `EnhancedButton`.
    at invariant (invariant.js:44)
    at ReactCompositeComponentWrapper.instantiateReactComponent [as _instantiateReactComponent] (instantiateReactComponent.js:74)
    at ReactCompositeComponentWrapper.performInitialMount (ReactCompositeComponent.js:367)
    at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:258)
    at Object.mountComponent (ReactReconciler.js:46)
    at ReactDOMComponent.mountChildren (ReactMultiChild.js:238)
    at ReactDOMComponent._createInitialChildren (ReactDOMComponent.js:697)
    at ReactDOMComponent.mountComponent (ReactDOMComponent.js:516)
    at Object.mountComponent (ReactReconciler.js:46)
    at ReactCompositeComponentWrapper.performInitialMount (ReactCompositeComponent.js:371)
    at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:258)
    at Object.mountComponent (ReactReconciler.js:46)
    at ReactCompositeComponentWrapper.performInitialMount (ReactCompositeComponent.js:371)
    at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:258)
    at Object.mountComponent (ReactReconciler.js:46)
    at ReactDOMComponent.mountChildren (ReactMultiChild.js:238)
    at ReactDOMComponent._createInitialChildren (ReactDOMComponent.js:697)
    at ReactDOMComponent.mountComponent (ReactDOMComponent.js:516)
    at Object.mountComponent (ReactReconciler.js:46)
    at ReactCompositeComponentWrapper.performInitialMount (ReactCompositeComponent.js:371)
    at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:258)
    at Object.mountComponent (ReactReconciler.js:46)
    at ReactDOMComponent.mountChildren (ReactMultiChild.js:238)
    at ReactDOMComponent._createInitialChildren (ReactDOMComponent.js:697)
    at ReactDOMComponent.mountComponent (ReactDOMComponent.js:516)
    at Object.mountComponent (ReactReconciler.js:46)
    at ReactCompositeComponentWrapper.performInitialMount (ReactCompositeComponent.js:371)
    at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:258)
    at Object.mountComponent (ReactReconciler.js:46)
    at ReactDOMComponent.mountChildren (ReactMultiChild.js:238)
    at ReactDOMComponent._createInitialChildren (ReactDOMComponent.js:697)
    at ReactDOMComponent.mountComponent (ReactDOMComponent.js:516)
    at Object.mountComponent (ReactReconciler.js:46)
    at ReactCompositeComponentWrapper.performInitialMount (ReactCompositeComponent.js:371)
    at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:258)
    at Object.mountComponent (ReactReconciler.js:46)
    at ReactCompositeComponentWrapper.performInitialMount (ReactCompositeComponent.js:371)
    at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:258)
    at Object.mountComponent (ReactReconciler.js:46)
    at ReactCompositeComponentWrapper.performInitialMount (ReactCompositeComponent.js:371)
    at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:258)
    at Object.mountComponent (ReactReconciler.js:46)
    at ReactCompositeComponentWrapper.performInitialMount (ReactCompositeComponent.js:371)
    at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:258)
    at Object.mountComponent (ReactReconciler.js:46)
    at ReactCompositeComponentWrapper.performInitialMount (ReactCompositeComponent.js:371)
    at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:258)
    at Object.mountComponent (ReactReconciler.js:46)
    at ReactCompositeComponentWrapper.performInitialMount (ReactCompositeComponent.js:371)
    at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:258)
    at Object.mountComponent (ReactReconciler.js:46)
    at ReactCompositeComponentWrapper.performInitialMount (ReactCompositeComponent.js:371)
    at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:258)
    at Object.mountComponent (ReactReconciler.js:46)
    at ReactCompositeComponentWrapper.performInitialMount (ReactCompositeComponent.js:371)
    at ReactCompositeComponentWrapper.mountComponent (ReactCompositeComponent.js:258)
    at Object.mountComponent (ReactReconciler.js:46)
    at mountComponentIntoNode (ReactMount.js:104)
    at ReactReconcileTransaction.perform (Transaction.js:140)
    at batchedMountComponentIntoNode (ReactMount.js:126)
    at ReactDefaultBatchingStrategyTransaction.perform (Transaction.js:140)
    at Object.batchedUpdates (ReactDefaultBatchingStrategy.js:62)
    at Object.batchedUpdates (ReactUpdates.js:97)
    at Object._renderNewRootComponent (ReactMount.js:320)
    at Object._renderSubtreeIntoContainer (ReactMount.js:401)
    at Object.render (ReactMount.js:422)
    at Object.<anonymous> (index.js:36)
    at __webpack_require__ (bootstrap e3e2367…:555)
    at fn (bootstrap e3e2367…:86)
    at Object.<anonymous> (bootstrap e3e2367…:578)
    at __webpack_require__ (bootstrap e3e2367…:555)
    at bootstrap e3e2367…:578
    at bootstrap e3e2367…:578

λ‚΄ μ½”λ“œλŠ” https://github.com/hhimanshu/spicyveggie/tree/cards ( cards λΆ„κΈ°)μ—μ„œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

무엇이 λ‹€λ₯Έμ§€ 잘 λͺ¨λ₯΄κ² μ§€λ§Œ κ·Έλƒ₯ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€

@janzenz
λ‚˜λŠ” λ˜ν•œ μ‹œλ„ browserHistory.push('/howItWorks') μˆ˜μž… import browserHistory from 'react-router-dom' 만 가지고 undefuned .

@μ˜€λ‘μ΄κ·Έ ,
#/your/link μ‹œλ„ν–ˆμ§€λ§Œ 아무데도 데렀가지 μ•ŠμŠ΅λ‹ˆλ‹€
/your/link μ‹œλ„ν–ˆμ§€λ§Œ νŽ˜μ΄μ§€λ₯Ό λ‹€μ‹œ λ‘œλ“œν•˜κ³  Drawer μ—μ„œ Material-UI Drawer λ₯Ό μžƒμŠ΅λ‹ˆλ‹€.

이 쀑 μ–΄λŠ 것도 λ‚˜λ₯Ό μœ„ν•΄ μΌν•˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€. λ‚΄ μ½”λ“œλŠ” https://github.com/hhimanshu/spicyveggie/tree/cards ( cards λΆ„κΈ°)μ—μ„œ μ‚¬μš©ν•  수 있으며 νŠΉμ • 컀밋은 https://github.com/hhimanshu/spicyveggie/commit/844b7b7cddf9102995cd2680a783df3b6ef485μž…λ‹ˆλ‹€ . λˆ„κ΅°κ°€ λ„μ™€μ£Όμ„Έμš”?

@hhimanshu 이 쀄 을 λ‹€μŒμœΌλ‘œ λ³€κ²½ν•©λ‹ˆλ‹€.

import { Link } from 'react-router-dom'

MDN에 λŒ€ν•œ μΆ”κ°€ 정보

@DaxChen , κ°μ‚¬ν•©λ‹ˆλ‹€. κ·Έκ±°μ˜€λ‹€. κ·ΈλŸ¬λ‚˜ λ‚΄ νŽ˜μ΄μ§€κ°€ {<Link to="/menu"/>} 둜 λ‘œλ“œλ˜λŠ” κ²½μš°κ°€ μ•„λ‹ˆλΌ 전체 νŽ˜μ΄μ§€κ°€ λ‘œλ“œλ˜κ³  λ‚΄ Drawer λŠ” μ‚¬λΌμ§‘λ‹ˆλ‹€.

screen shot 2017-04-24 at 1 54 23 pm

@hhimanshu \menu route μ—μ„œ Menu ꡬ성 μš”μ†Œλ§Œ μ‚¬μš© ν–ˆκΈ° λ•Œλ¬Έμ— App κ°€ λ Œλ”λ§λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

Menu 및 Summary λ₯Ό App λ˜λŠ” 일뢀 λ ˆμ΄μ•„μ›ƒ ꡬ성 μš”μ†Œ μ•ˆμ— μ€‘μ²©ν•˜κ³  각각의 μžμ‹μ„ μ „λ‹¬ν•©λ‹ˆλ‹€.

react-devtoolsλ₯Ό μ‚¬μš©ν•˜μ—¬ λ Œλ”λ§λœ ꡬ성 μš”μ†Œ 계측 ꡬ쑰와 ν•΄λ‹Ή μƒνƒœλ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€!

이것은 material-ui와 관련이 μ—†μŠ΅λ‹ˆλ‹€. react-router의 tutorials/docsμ—μ„œ μžμ„Ένžˆ μ½μ–΄λ³΄μ„Έμš”.

@DaxChen 감사 https://github.com/hhimanshu/spicyveggie/blob/master/src/index.js#L20으둜 ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.

+1

React Routerμ—μ„œ HANDLED 및 NOT HANDLED 링크에 λŒ€ν•œ ν•΄κ²° 방법.


λŒ€μƒ 링크가 React Router에 μ˜ν•΄ μ²˜λ¦¬λ˜λŠ” 경우

MenuItemLink.js

import React from 'react';
import { MenuItem } from 'material-ui/Menu';
import { Route } from 'react-router-dom';

class MenuItemLink extends React.Component {
  render() {
    const {
      to, also,
      ...rest
    } = this.props;

    return (
      <Route
        render={({ history, location }) => (
          <MenuItem
            onClick={() => {
              history.push(to);
              if (typeof also === 'function') {
                also();
              }
            }}
            {...rest}
          />
        )}
      />
    );
  }
}
MenuItemLink.muiName = 'MenuItem';
export default MenuItemLink;

μƒ˜ν”Œ μ½”λ“œ:

import MenuItemLink from './MenuItemLink';
<Menu ... >
        <MenuItemLink to="/users"
          also={this.handleRequestClose}>Users</MenuItemLink>
</Menu>

λŒ€μƒ 링크가 React Router에 μ˜ν•΄ μ²˜λ¦¬λ˜μ§€ μ•ŠλŠ” 경우, 즉: μš”μ²­μ΄ API μ„œλ²„ λ˜λŠ” 무엇이든 μ „λ‹¬λ©λ‹ˆλ‹€.

온클릭 κΈ°λŠ₯:

    function facebookLoginRedirect () {
      if (window) window.location.href = "/api/auth/facebook"
      return true;
    }

μƒ˜ν”Œ μ½”λ“œ:

<MenuItem onClick={ facebookLoginRedirect }>Login with Facebook</MenuItem>

λ‹€λ₯Έ μ‚¬λžŒμ΄ μš°μ—°νžˆ λ°œκ²¬ν•œ 경우λ₯Ό λŒ€λΉ„ν•˜μ—¬ 여기에 μΆ”κ°€ν•˜λ €κ³  ν•©λ‹ˆλ‹€.

v3.4μ—μ„œλŠ” λ‹€μŒκ³Ό 같이 달성할 수 μžˆμŠ΅λ‹ˆλ‹€.

import { Link } from 'react-router-dom';
import MenuItem from '@material-ui/core/MenuItem';

...

<MenuItem component={Link} to="/your-path">...</MenuItem>

메뉴 λ ˆμ΄μ•„μ›ƒμ„ 깨지 μ•Šκ³  λ‚˜λ₯Ό μœ„ν•΄ μΌν•œ μœ μΌν•œ μ†”λ£¨μ…˜μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.
```μžλ°”μŠ€ν¬λ¦½νŠΈ


μ•Œλ¦Ό



ν”„λ‘œν•„


메뉴 λ ˆμ΄μ•„μ›ƒμ„ 깨지 μ•Šκ³  λ‚˜λ₯Ό μœ„ν•΄ μΌν•œ μœ μΌν•œ μ†”λ£¨μ…˜μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

<MenuList>
  <Link to='/your-path' style={{ textDecoration: 'none' }}>
    <MenuItem>
      Notifications
     </MenuItem>
  </Link>
  <Link to='/your-path' style={{ textDecoration: 'none' }}>
    <MenuItem>
      Profile
     </MenuItem>
  </Link>
</MenuList>

@eladlevy 이것은 λΉˆμ•½ν•œ μ‹œλ§¨ν‹± HTML둜 끝날 κ²ƒμž…λ‹ˆλ‹€.

<ul>
  <a><li/></a>
  <a><li/></a>
</ul>

λˆ„κ΅°κ°€μ—κ²Œ 도움이 될 수 μžˆλ„λ‘ 여기에 λ‚¨κ²¨λ‘‘λ‹ˆλ‹€(v3.9.0 μ‹€ν–‰). react-router-dom <Link> 의 메뉴 역할을 ν•˜λ €λ©΄ <Select> κ°€ ν•„μš”ν–ˆμŠ΅λ‹ˆλ‹€. 각 λ§ν¬λŠ” μ–Έμ–΄ 섀정에 ν•΄λ‹Ήν•˜λ―€λ‘œ λ“œλ‘­λ‹€μš΄μ€ 쿼리 λ§€κ°œλ³€μˆ˜μ˜ ν˜„μž¬ μ–Έμ–΄ 값을 ν‘œμ‹œν•©λ‹ˆλ‹€.

<Select value={currentLanguage}>
  {languages.map(language => (
    <ListItem
      button
      component={btnProps => (
        <Link
          to={ `/things?lang=${ language }` }
          {...btnProps as any}
        />
      )}
      value={language}
      key={language}
    >
      {language}
    </ListItem>
  ))}
</Select>

이것은 μ΅œμ†Œν•œμ˜ TypeScript μΊμŠ€νŒ…μ΄ ν•„μš”ν•˜κ³  Material UI와 μΌκ΄€λœ 비주얼을 μœ μ§€ν•˜λŠ” κ°€μž₯ κΉ¨λ—ν•œ μ†”λ£¨μ…˜μ΄μ—ˆμŠ΅λ‹ˆλ‹€.

@goyney μ—λŠ” μ†”λ£¨μ…˜μ΄ μžˆμŠ΅λ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€.

λ‹€λ₯Έ μ‚¬λžŒμ΄ μš°μ—°νžˆ λ°œκ²¬ν•œ 경우λ₯Ό λŒ€λΉ„ν•˜μ—¬ 여기에 μΆ”κ°€ν•˜λ €κ³  ν•©λ‹ˆλ‹€.

v3.4μ—μ„œλŠ” λ‹€μŒκ³Ό 같이 달성할 수 μžˆμŠ΅λ‹ˆλ‹€.

import { Link } from 'react-router-dom';
import MenuItem from '@material-ui/core/MenuItem';

...

<MenuItem component={Link} to="/your-path">...</MenuItem>

μž‘λ™ν•˜κ³  κΉ¨λ—ν•œ μ†”λ£¨μ…˜, κ°μ‚¬ν•©λ‹ˆλ‹€ ❀️

μ™ΈλΆ€ 링크의 경우 component="a" ν•˜κ³  μ‹Άμ§€λ§Œ MenuItem μ—μ„œ <li> MenuItem 도 λ‘˜λŸ¬μŒ‰λ‹ˆλ‹€.

<MenuList>
    <li>
        <MenuItem
            component="a"
            href="https://google.com"
            target="_blank"
        >Google</MenuItem>
    </li>
</MenuList>

그러면 λ‹€μŒ HTML이 μƒμ„±λ©λ‹ˆλ‹€.

<ul class="MuiList-root MuiList-padding" role="menu" tabindex="-1">
    <li>
        <a class="[...]" tabindex="-1" aria-disabled="false" role="menuitem" href="https://google.com" target="_blank">Google</a>
    </li>
</ul>

νŒμ—… 메뉴가 있고 μ‚¬μš©ν•œλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€.

'react-router-dom'μ—μ„œ { 링크 } κ°€μ Έμ˜€κΈ°;
'@material-ui/core/MenuItem'μ—μ„œ MenuItem κ°€μ Έμ˜€κΈ°;

\\

λ§ν¬λŠ” /your-path νŽ˜μ΄μ§€λ₯Ό λΆˆλŸ¬μ˜΅λ‹ˆλ‹€. νŒμ—… 메뉴λ₯Ό μ–΄λ–»κ²Œ λ‹«μ„κΉŒμš”?

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

κ΄€λ ¨ 문제

ryanflorence picture ryanflorence  Β·  3μ½”λ©˜νŠΈ

chris-hinds picture chris-hinds  Β·  3μ½”λ©˜νŠΈ

FranBran picture FranBran  Β·  3μ½”λ©˜νŠΈ

finaiized picture finaiized  Β·  3μ½”λ©˜νŠΈ

revskill10 picture revskill10  Β·  3μ½”λ©˜νŠΈ