1.0.0 • Published 24 days ago

@evo/urlmapper-router v1.0.0

Weekly downloads
16
License
ISC
Repository
gitlab
Last release
24 days ago

urlmapper-router

npm - https://www.npmjs.com/package/@evo/urlmapper-router

React компонент для декларативного использвания urlmapper.

Установка

npm i @evo/urlmapper-router @evo/urlmapper

Пример:

import { BrowserRouter, Route } from 'react-router-dom';
import { UrlMapperRouter} from '@evo/urlmapper-router'
import { UrlMapper, Mapper } from '@evo/urlmapper';

const mapper1 = new UrlMapper({
    typeAlias: /[\w\-]+/,
    companyId: /\d+/,
});

const mapper2 = new UrlMapper({
    typeAlias: /[\w\-]+/,
    page: /\d+/,
});

mapper1.connect('/{typeAlias};c{comapnyId}');
mapper2.connect('/{typeAlias};p{page}.html');

const App = () => (
    <BrowserRouter>
        <UrlMapperRouter defaultComponent={Page404}>
            <Mapper mapper={mapper1} component={Comp1} />
            <Mapper mapper={mapper2} component={Comp2} />
            <Mapper path="/test-path" component={Comp3} />
            <Mapper path="/path-with-params/:params" component={Comp4} />
        </UrlMapperRouter>
    </BrowserRouter>
)

Получение шаблонных параметров из url

Самый простой способ получения параметров - воспользоваться hook-ом:

import React from 'react';
import { useMapper } from '@evo/urlmapper-router';

const Comp1 = () => {
    // params - параметры, полученные из шаблонов
    // query - GET параметры
    // mapper - инстанc UrlMapper-а (можно использовать для генерации урлов см. ниже)
    // mapper только для урлов созданных спомощью const mapper1 = new UrlMapper(...)
    const { params, mapper, query } = useMapper();
    return (
        <div>{urlMapper.params}</div> 
    )
}

Так-же можно воспользоваться контекстом

import React from 'react';
import { UrlMapperContext } from '@evo/urlmapper-router';

const Comp1 = () => {
    const { urlMapper } = React.useContext(UrlMapperContext);
    return (
        <div>{urlMapper.params}</div> 
    )
}

Или HOC

import React from 'react';
import { withMapper } from '@evo/urlmapper-router';

const Comp1 = withMapper(({ params }) => {
    return (
        <div>{params}</div> 
    )
})

Генерация url

import React from 'react';
import { useMapper } from '@evo/urlmapper-router';

const Comp1 = () => {
    const { mapper } = useMapper();
    const newUrl = mapper.url('/services;c123', { companyId: 111 }); // /services;c111
    return (
        <div>{newUrl}</div> 
    )
}

useUrl

import React from 'react';
import { useUrl } from '@evo/urlmapper-router';

const Comp1 = () => {
    const { urlCurrent } = useUrl();
    const newUrl = urlCurrent({ params: { companyId: 111 } }); // /services;c111
    // const newUrl = urlCurrent({ params: { companyId: 111 }, absolute: true }); // https://current.origin.com/services;c111
    // const newUrl = urlCurrent({ skipSearch: true }); // will skip search
    return (
        <div>{newUrl}</div> 
    )
}

urlCurrent(opts)

  • opts.params - params to add or modify (GET or template params)
  • opts.absolute - generate absolute link
  • opts.skipSearch - will omit GET parameters

UrlMapperContext

{
    urlMapper: {
        mapper: <url mapper instance>,
        params: <parsed template params>,
        query: <parsed GET params>,
        match: <regex match result>
    }
}
1.0.0

24 days ago

0.3.5

10 months ago

0.3.4

2 years ago

0.3.3

3 years ago

0.3.2

5 years ago

0.3.1

5 years ago

0.3.0

5 years ago

0.2.3

5 years ago

0.2.2

5 years ago

0.2.1

5 years ago

0.2.0

5 years ago

0.1.1

5 years ago

0.0.2

5 years ago