Không quá quen thuộc với bộ định tuyến phản ứng, nhưng tôi cần chức năng của NavLink để đặt lớp đang hoạt động trên phần tử li
mẹ và không phải là phần tử a
.Cài đặt React Router v4 activeClass trên bố mẹ
Để thực hiện điều này, tôi chỉ xem mã nguồn của NavLink
và sao chép nó vào một phần tử mới. (Ví dụ sử dụng nguyên cảo, nhưng chỉ là về giống như js nào)
import * as React from 'react';
import { Link, withRouter, Route } from 'react-router-dom';
class LiNavLink extends React.Component<any, {}> {
render() {
const {to,exact, strict, activeClassName, className, activeStyle, style, isActive: getIsActive, ...rest } = this.props;
return (
<Route
path={typeof to === 'object' ? to.pathname : to}
exact={exact}
strict={strict}
children={({ location, match }) => {
const isActive = !!(getIsActive ? getIsActive(match, location) : match)
return (
<li
className={isActive ? [activeClassName, className].join(' ') : className}
style={isActive ? { ...style, ...activeStyle } : style}>
<Link
to={to}
{...rest}
/>
</li>
)
}}
/>
);
}
}
export default LiNavLink;
Sau đó, sử dụng:
<ul>
<LiNavLink activeClassName='active' exact={true} strict to="/example"><span>Active</span></LiNavLink>
<LiNavLink activeClassName='active' exact={true} strict to="/example/archived"><span>Archived</span></LiNavLink>
</ul>
Tôi đang sử dụng một HashRouter
và đối với một số lý do mà tôi không thể tìm ra, điều này không cập nhật khi các tuyến đường thay đổi, chỉ khi tôi khó 'làm mới' trang hiện nó cập nhật như thế nào nên.
Tôi tin rằng nó không bao giờ cập nhật vì đạo cụ không bao giờ thay đổi? Vì vậy, nó không biết để cập nhật chính nó?
Tôi làm cách nào để cập nhật? Hay là vấn đề của tôi ở đâu đó khác?
Bạn đã bao giờ tìm thấy câu trả lời cho điều này? Tôi cũng muốn chức năng này. –
@JimFactor Vâng, giải pháp lên trên công trình, vấn đề của tôi là có một thành phần khác cập nhật chặn. Tôi đã tìm ra tài liệu này https://github.com/ReactTraining/react-router/blob/master/packages/react-router/docs/guides/blocked-updates.md –