ui-router / react

🔼 UI-Router for React
https://ui-router.github.io/react/
MIT License
512 stars 128 forks source link

{location: 'replace'} doesn't work in stateService.go(stateName, params, {location: 'replace'}) #1223

Open Fangfanghao opened 3 months ago

Fangfanghao commented 3 months ago

Hi, In my demo, I did this: index.tsx:

ReactDOM.render(
    <UIRouter router={router}>
        <div>
            <h1>Dynamic Example</h1>
            <UIView />
        </div>
    </UIRouter>,
    document.querySelector('#root'),
);

router.config.ts:

export const router = new UIRouterReact();
const plugins = [
    servicesPlugin,
    hashLocationPlugin,
];
plugins.forEach(plugin => {
    router.plugin(plugin);
});

// Register the initial (eagerly loaded) states
states.forEach((state) => router.stateRegistry.register(state));

When I call

 let num = 1;
const DynamicExample: ReactStateDeclaration = {
    name: 'dynamic',
    url: 'dynamic/?queryParam1',
    component: (props) => {
        const $state = props.transition.router.stateService;
        return (
            <button
                onClick={() => {
                    $state.go('dynamic', { queryParam1: num++ }, { location: 'replace'});
                }}
            >
                only change queryParam1
            </button>
        );
    }}

in my code, the history.length still increased.

Correct me if I'm wrong. Thank you.

Fangfanghao commented 3 months ago

I just found that this works as expected(replace history):

stateService.go(stateName, params, {source: 'url'})

I know 'stateService' is from '@uirouter/core'. Maybe I should go to create an issue there.