blog.bouzuya.net

2017-04-01 bouzuya/fake-history をつくった

bouzuya/fake-history をつくった。

fake-history は History interface を備えた fake object だ。

次は README から引用した例。

import * as assert from 'assert';
import { FakeHistory } from 'fake-history';

const history = new FakeHistory();
history.pushState(1, '1', '/1');
history.pushState(2, '2', '/2');
history.pushState(3, '3', '/3');
history.back();

assert(history.length === 3);
assert(history.state === 2);

// extended
assert(history.current === '/2');
assert(history.currentState === 2);
assert(history.next === '/3');
assert(history.nextState === 3);
assert(history.previous === '/1');
assert(history.previousState === 1);

欲しくなった理由は react-router などを使わず自前で実装していて、 Browser の History と似た挙動をする fake object が必要だったから。具体的には currentprevious あるいは next などが欲しかった。それらで history.back() が可能かを判断したかった (もちろん、厳密には確認できないのだけど) 。

気が向いたら使ってみてほしい。

……で、ぼくの場合、これで要件としては問題ないはずなんだけど……。ぼくは History との互換性のために classproperty を使っているのが嫌なので、 fake-history-fns をつくってそちらを使おうかと思っている。

あ、ちなみに 2017-04-01 だからといって、 fake-history は嘘じゃない。