An intelligent link component above <a>
element and <NavLink>
from react-router
. Also, it allows you to create link component from url template with type inference.
Inspired and strongly based on react-omni-link
English | 中文
import createFactory from 'react-router-template-link'
const {Link, createLink} = createFactory();
const UserLink = createLink<{userId: string}>('/user/{userId}');
<UserLink userId="xxx" />
const url = UserLink.toUrl({userId: 'xxx'});
// or use directly
<Link to="/user/xxx" />
createFactory
accept some options listed below:
const {Link, createLink} = createFactory(options);
{string} options.basename
: In some case Link is not under BrowserRouter which needs basename. It should only be equal to the basename of BrowserRouter, or it will lead to bugs. Default as ''
{Regexp} options.interpolate
: Default as /{(\w+)}/g
{function} options.isExternal
: A function to tell whether the link is external or not. External link will be open in new Tab. Default as when to.includes('://'') || to.startsWith('mailto:')
returns true
{boolean} options.encodePathVariable
: Configure whether pathVariable should be encoded. Such as encode a/b
to a%2fb
. Default as false
{boolean} options.encodeQueryVariable
: Configure whether queryVariable should be encoded. Such as encode a/b
to a%2fb
. Default as true
{ReactNode} options.externalIcon
: Show Icon when link is external. Default as null
Link
or TemplatedLink
accepts some props listed below:
{boolean} blank
: Whether link opens in a new window. An external link will always open in a new window, which is determined by isExternal
option.
className, style, children
: Same as react-router-dom
, When link is external, isActive
will be considered as false
onClick, & others
: Same as a
{string} hash
: Add hash to TemplatedLink.