语义 UI React 菜单指向不会在路由更改时更改活动状态
Semantic UI React Menu pointing won't change active state on Route change
我使用语义在 React 中构建了小型 SPA UI React。菜单正常工作,当我单击任何菜单项时,它会将我带到它应该去的地方。
问题是,如果我转到 page/Route 并从那里将我的 page/Route 更改为另一个,指向菜单中的活动字段仍指向上一页。
一切都按照应有的方式导入。我只想找到让我的菜单始终指向当前显示的适当路线的方式。
这是我的代码:
render() {
const { activeItem } = this.state
return (
<div>
<BrowserRouter>
<div>
<Menu pointing>
<Menu.Item name='Home' as={Link} to='/home' active={activeItem === 'Home'} onClick={this.handleItemClick} />
<Menu.Item name='Regions' as={Link} to='/regions' active={activeItem === 'Regions'} onClick={this.handleItemClick} />
<Menu.Item name='Countries' as={Link} to='/countries' active={activeItem === 'Countries'} onClick={this.handleItemClick} />
<Menu.Item name='AllCountries' as={Link} to='/allcountries' active={activeItem === 'AllCountries'} onClick={this.handleItemClick} />
<Menu.Menu position='left'>
<Menu.Item>
<Form.Group onSubmit={this.submit}>
<Input placeholder='Search...' value={this.state.searchTerm} onChange={this.takeTerm} onKeyPress={this.showData}/>
<Link to="/countrydata"><Button type="submit" circular icon="search" /></Link>
</Form.Group>
</Menu.Item>
</Menu.Menu>
<Button.Group>
<Button>English</Button>
<Button.Or text="or"/>
<Button>Francais</Button>
<Button.Or text="or"/>
<Button>Italiano</Button>
</Button.Group>
</Menu>
<Segment>
<Switch>
<Route path="/regions" component={Regions}/>
<Route path="/countries" component={Countries}/>
<Route path="/allcountries" component={AllCountries}/>
<Route path="/countrydata" component={Country} />
<Route path="/" component={Home} />
</Switch>
</Segment>
{this.state.notFound ? (<div className="showError">Searched country does not exist</div>) : <div></div>}
</div>
</BrowserRouter>
</div>
)
}
}
我们使用一个组件:
const MenuLink = ({ to, exact, ...rest }) => (
<Route path={to} exact={exact} children={({ match }) => (
<Link to={to}><Menu.Item active={!!match}{...rest} /></Link>
)} />
);
我今天遇到了同样的问题,或者至少是类似的问题。所以我通过用 NavLink 替换 Link 并删除语义的 "handleItemClick" 来解决我的问题。我们不需要语义来处理活动 Menu.Item 因为 react-router 可以用 NavLink.
<Menu.Item name='Countries' as={NavLink} to='/countries' />
我使用语义在 React 中构建了小型 SPA UI React。菜单正常工作,当我单击任何菜单项时,它会将我带到它应该去的地方。
问题是,如果我转到 page/Route 并从那里将我的 page/Route 更改为另一个,指向菜单中的活动字段仍指向上一页。
一切都按照应有的方式导入。我只想找到让我的菜单始终指向当前显示的适当路线的方式。
这是我的代码:
render() {
const { activeItem } = this.state
return (
<div>
<BrowserRouter>
<div>
<Menu pointing>
<Menu.Item name='Home' as={Link} to='/home' active={activeItem === 'Home'} onClick={this.handleItemClick} />
<Menu.Item name='Regions' as={Link} to='/regions' active={activeItem === 'Regions'} onClick={this.handleItemClick} />
<Menu.Item name='Countries' as={Link} to='/countries' active={activeItem === 'Countries'} onClick={this.handleItemClick} />
<Menu.Item name='AllCountries' as={Link} to='/allcountries' active={activeItem === 'AllCountries'} onClick={this.handleItemClick} />
<Menu.Menu position='left'>
<Menu.Item>
<Form.Group onSubmit={this.submit}>
<Input placeholder='Search...' value={this.state.searchTerm} onChange={this.takeTerm} onKeyPress={this.showData}/>
<Link to="/countrydata"><Button type="submit" circular icon="search" /></Link>
</Form.Group>
</Menu.Item>
</Menu.Menu>
<Button.Group>
<Button>English</Button>
<Button.Or text="or"/>
<Button>Francais</Button>
<Button.Or text="or"/>
<Button>Italiano</Button>
</Button.Group>
</Menu>
<Segment>
<Switch>
<Route path="/regions" component={Regions}/>
<Route path="/countries" component={Countries}/>
<Route path="/allcountries" component={AllCountries}/>
<Route path="/countrydata" component={Country} />
<Route path="/" component={Home} />
</Switch>
</Segment>
{this.state.notFound ? (<div className="showError">Searched country does not exist</div>) : <div></div>}
</div>
</BrowserRouter>
</div>
)
} }
我们使用一个组件:
const MenuLink = ({ to, exact, ...rest }) => (
<Route path={to} exact={exact} children={({ match }) => (
<Link to={to}><Menu.Item active={!!match}{...rest} /></Link>
)} />
);
我今天遇到了同样的问题,或者至少是类似的问题。所以我通过用 NavLink 替换 Link 并删除语义的 "handleItemClick" 来解决我的问题。我们不需要语义来处理活动 Menu.Item 因为 react-router 可以用 NavLink.
<Menu.Item name='Countries' as={NavLink} to='/countries' />