2017-11-19 11 views
1

React.js로 메뉴를 만듭니다. 그러나 저에게는 문제가 있습니다. 2 개의 하위 메뉴가 있으며이 하위 메뉴에는 메뉴 항목이 있습니다. 그 중 하나를 가리키면 메뉴 항목이 표시됩니다. 그러나 다른 하위 메뉴를 클릭해도 이전 메뉴 항목이 계속 표시됩니다. 어떻게 방지 할 수 있습니까? 내 코드 :반응에서 하위 메뉴 항목을 어떻게 비활성화 할 수 있습니까?

내 첫 번째 클래스 : Sider.js

function Sider(props) { 
    return (
    <Menu mode="horizontal"> 
    selectedKeys={[props.current]} 
    onClick={props.handleClick} 
     <SubMenu title={<span><Icon type="setting" />Sub menu 1</span>}> 
     <MenuItem> menu item 1</MenuItem> 
     <MenuItem> menu item 2</MenuItem> 
     </SubMenu> 
     <SubMenu title={<span><Icon type="laptop" />Sub menu 2</span>}> 
     <MenuItem> menu item 3</MenuItem> 
     </SubMenu> 
    </Menu> 
); 
} 

이 내가 사이더 함수를 호출 내 주요 클래스입니다.

Main.js :

import PropTypes from 'prop-types'; 

class Main extends React.Component { 
    constructor(props) { 
     super(props) 
     this.state = { 
     current: 'MenuItem' 
     } 
    } 

    handleClick = (e) => { 
     this.setState({ 
     current: e.key, 
     }); 
    } 

    render() { 
    return (
     <div> 
      <Sider navigation={this.props.navigation} handleClick={this.props.handleClick} current={this.state.current /> 
     </div> 
    ); 
    } 
} 

Main.propTypes = { 
    handleClick: PropTypes.func, 
}; 
+0

를 참조하시기 바랍니다처럼 Sider 기능이 될 것입니다에서 작업 메뉴를 만든

아래의 작업 코드를 볼 수 하위 메뉴는 클릭 할 때 활성화되어 있어야합니다. 옳은? –

+0

예 그렇다면이 하위 메뉴가 닫혀 다른 하위 메뉴가 열립니다. @elumalai_kp – willywonka15

답변

0

key을 사용하면 활성 하위 메뉴 인 state을 유지 관리하고 selectedKeys을 사용할 수 있습니다. 여기 codepen

import PropTypes from 'prop-types'; 

class App extends React.Component { 
    state = { 
    current: 'menu1:1', 
    } 

    handleClick = (e) => { 
    this.setState({ 
     current: e.key, 
    }); 
    } 

    render() { 
    return (
     <div> 
     <Sider navigation={this.props.navigation} handleClick={this.handeClick} current={this.state.current} /> 
     </div> 
    ); 
    } 
} 

App.propTypes = { 
    handleClick: PropTypes.func, 
}; 

을 codeopen 그리고 문서화를 들어

function Sider(props) { 
    return (
    <Menu onClick={props.handleClick} selectedKeys={[props.current]}> 
     <SubMenu title={<span><Icon type="setting" />Sub menu 1</span>}> 
     <MenuItem key="setting:1"> menu item 1</MenuItem> 
     <MenuItem key="setting:2"> menu item 2</MenuItem> 
     </SubMenu> 
     <SubMenu title={<span><Icon type="laptop" />Sub menu 2</span>}> 
     <MenuItem key="laptop:1"> menu item 3</MenuItem> 
     </SubMenu> 
    </Menu> 
); 
} 

아래 horizontal menuVertical Menu

+0

내 코드에서 handleClick을 어디에 두어야하는지 이해할 수 없다? 나는 App 클래스와 Sider 클래스를 가지고있다. 하나의 클래스에있는 두 코드 모두에서 – willywonka15

+0

아마도 onclick을 메뉴에 배치해야합니다. 나는 메뉴 자체를 App으로 생각했다. 또는 onclick을 전달하고 시나리오에서'sider' 함수에 소품으로 상태를 전달하십시오. 희망을 얻을 수 있기를 바랍니다! –

+0

@ willywonka15 - 수행 방법에 대한 아이디어를 얻을 수있는 업데이트 된 답변보기 –

0

어떻게 당신이 유혹 메커니즘을 구현 했습니까? 코드를 추가하십시오. 마우스를 가져갈 때 각 하위 메뉴의 내부 상태를 변경합니까?

antd 구성 요소에 대한 설명서를 더 잘 읽어야합니다. 이러한 구성 요소를 사용하는 방법을 더 잘 이해하려면 link으로 이동하십시오.

+0

아니요, 어떻게 할 수 있습니까? – willywonka15

+0

더 많은 코드를보고 싶습니다. Menu, SubMenu 구성 요소를 만들었습니까? 아니면 타사에서 가져 오는 중입니까? –

+0

내 렌더링 기능을 추가합니다. – willywonka15