Используя реакцию 15.1.0, реактивный маршрутизатор 2.5.0 и бутстрап 3.3 (это менее важно), я разработал это решение для активирования ссылок:
npm install --save classnames
npm install --save lodash
Компонент:
import React from 'react';
import { Link, IndexLink } from 'react-router';
import _ from 'lodash';
import classnames from 'classnames';
class NavItem extends React.Component {
constructor(props) {
super(props);
// The default state
this.state = {
isActive: false,
unregisterRouteListener: false
};
// Binding for functions
this.locationHasChanged = this.locationHasChanged.bind(this);
}
componentDidMount() {
// Check if component is active on mount and add listener on route change
this.setState({
isActive: this.context.router.isActive(this.props.to, true),
unregisterRouteListener: this.context.router.listen(this.locationHasChanged)
});
}
componentWillUnmount() {
if (this.state.unregisterRouteListener) {
// Remove the listener
this.state.unregisterRouteListener();
}
// Reset the state
this.setState({
isActive: false,
unregisterRouteListener: false
});
}
// Update the state of the component, based on the router path
locationHasChanged() {
this.setState({
isActive: this.context.router.isActive(this.props.to, true)
});
}
render () {
let { index } = this.props;
let LinkComponent = index ? Link : IndexLink;
let newProps = _.omit(this.props, 'router');
return (
<li className={classnames('', this.state.isActive ? 'active' : '' )}>
<LinkComponent {...newProps}>
{this.props.children}
</LinkComponent>
</li>
);
}
}
NavItem.contextTypes = {
router: React.PropTypes.object
};
export default NavItem;
Использование:
<NavItem to="/list">List</NavItem>
Я начинаю с React, поэтому решение, улучшения и могут содержать ошибки подхода. Однако он также может содержать полезную информацию или отправную точку для заинтересованных лиц.
Любая обратная связь или предложения более чем приветствуются. Благодаря! :)
Используйте положительный взгляд вперед и посмотрите за утверждением в соответствии с угловыми скобками, используйте .*?
для соответствия кратчайшей последовательности символов между этими скобками. Найти все значения, итерации MatchCollection
, возвращенных методом Matches()
.
Regex regex = new Regex("(?<=<<).*?(?=>>)");
foreach (Match match in regex.Matches(
"this is a test for <<bob>> who like <<books>>"))
{
Console.WriteLine(match.Value);
}
Что-то вроде этого:
(<<(?<element>[^>]*)>>)*
Эта программа может быть полезна:
Вы можете попробовать один из них:
(?<=<<)[^>]+(?=>>)
(?<=<<)\w+(?=>>)
Однако вам придется перебирать возвращенный MatchCollection.